一個(gè)形狀基類.. 一個(gè)圓 一個(gè)矩形。。。 一個(gè)工廠根據(jù)參數(shù)返回形狀子類 老掉牙的類名..英文不好...
——————————————-java——————————————————-
形狀基類
package?com.shiji.gongchang; public?interface?XingZhuang?{ ????????void???Run(); }
package?com.shiji.gongchang; //圓形類?繼承自形狀 public?class?Circle??implements?XingZhuang?{ ????@Override ????public?void?Run()?{ ????????//?TODO?Auto-generated?method?stub ????????System.out.println("Im?Cirlce!"); ????} }
package?com.shiji.gongchang; //矩形類??繼承自形狀 public?class?Rectangle?implements?XingZhuang?{ ????@Override ????public?void?Run()?{ ????????//?TODO?Auto-generated?method?stub ????????System.out.println("Rectangle!"); ????} }
工廠
package?com.shiji.gongchang; public?class?XingZhuangFactory?{ ????public?XingZhuang?CreateXingzhuang(String?obj) ????{ ????????????if(obj=="矩形") ????????????{ ????????????????return??new?Rectangle(); ????????????}else?if?(obj=="圓")?{ ????????????????return?new?Circle(); ????????????} ????????????return?null; ????} }
測試 //工廠模式 public?class?GongChangMoshi?{ ????public?static?void?main(String[]?args)?{ ????????XingZhuangFactory??xingZhuangFactory??=??new?XingZhuangFactory(); ????????xingZhuangFactory.CreateXingzhuang("矩形").Run(); ????????xingZhuangFactory.CreateXingzhuang("圓").Run(); ????} ????//靜態(tài)方法?加載C++類庫??test.dll ????static?{ ?????????System.loadLibrary("JniTest"); ????} }
——————————————-C++——————————————————-
形狀基類
#pragma?once class?Xingzhuang { public: ????virtual?void?Run()=0; ????Xingzhuang(); ????~Xingzhuang(); };
圓…
#pragma?once #include?"Xingzhuang.h" class?Circle?:public?Xingzhuang { public: ????virtual?void?Run(); ????Circle(); ????~Circle(); }; cpp: #include?"stdafx.h" #include?"Circle.h" Circle::Circle() { } Circle::~Circle() { } void?Circle::Run() { ????printf("Im?Circle~!"); }
方塊,…
#pragma?once #include?"Xingzhuang.h" class?Rectangle??:public?Xingzhuang { public: ????virtual?void?Run(); ????Rectangle(); ????~Rectangle(); }; cpp: #include?"stdafx.h" #include?"Rectangle.h" Rectangle::Rectangle() { } Rectangle::~Rectangle() { } void?Rectangle::Run() { ????printf("Im?Rectangle!"); }
工廠 ? ? ? ? ? ? ? ? ? ?-,-
#pragma?once #include?"Xingzhuang.h" enum?_Xtype { ????_rectangle=0, ????_circle=1 }; class?Factory { public: ????Factory(); ????Xingzhuang*??Create(_Xtype??t); ????~Factory(); }; cpp: #include?"stdafx.h" #include?"Factory.h" #include?"Circle.h" #include?"Rectangle.h" Factory::Factory() { } Factory::~Factory() { } Xingzhuang*??Factory::Create(_Xtype??t) { ????if?(t==_Xtype::_rectangle) ????{ ????????Rectangle*??p?=?new?Rectangle(); ????????return?p; ????}else?if?(t==_Xtype::_circle) ????{ ????????Circle*p?=?new?Circle(); ????????return?p; ????} ????return?NULL; }
demo:
#include?"stdafx.h" #include?"Factory.h"? inline?void?test(_Xtype??t) { ????Factory*?f?=?new?Factory(); ????if?(f) ????{ ????????Xingzhuang*?x?=?NULL; ????????x?=?f->Create(t); ????????if?(x) ????????{ ????????????x->Run(); ????????????delete?x; ????????} ????????delete?f; ????} } int?main() {? ????test(_Xtype::_circle); ????test(_Xtype::_rectangle); ????return?0; }