与简朴工场的区分:简朴工场须要修正原有类,违犯了开闭准绳。而工场要领就防止类这个题目。坚持了封装对象的建立历程的长处,只需增添工场类就能够,处理了简朴工场分支推断的题目。
工场要领形式包括四个角色:
Product:笼统产物
ConcreteProduct: 详细产物
Factory: 笼统工场
ConcreteFactory: 详细工场
UML类图
在此以学雷锋为例,应用工场要领形式,将雷锋的要领视为笼统产物,对应笼统工场; 学雷锋的人视为详细产物, 对应详细工场。如要增加学雷锋的职员种别只需增加响应的类,而不须要修正原有类。
测试用例:
[code]int main(){ //工场要领 IFactory *factory = new UnderGraduateFactory; //new一个大门生工场 //建立学雷锋的门生 LeiFeng *student = factory->createLeiFeng(); //门生干了哪些雷锋要领 student->BuyRice(); //买米 student->Sweep(); //扫地 student->Wash(); //洗濯 return 0; }
雷锋类(笼统产物):
[code]class LeiFeng{ public: virtual void BuyRice(){ std::cout << "Buy rice.\n"; } virtual void Sweep(){ std::cout << "Sweep.\n"; } virtual void Wash(){ std::cout << "Wash.\n"; } };
学雷锋的人(详细产物):
[code]class UnderGraduate: public LeiFeng{ }; //学雷锋的志愿者(详细产物) class Volunteer: public LeiFeng{ };
雷锋工场类(笼统工场):
[code]class IFactory{ public: //建立学雷锋对象 virtual LeiFeng* createLeiFeng(){ return NULL; } };
学雷锋的对象工场(详细工场):
[code]class UnderGraduateFactory: public IFactory{ LeiFeng* createLeiFeng(){ return new UnderGraduate; } }; class VolunteerFactory: public IFactory{ LeiFeng* createLeiFeng(){ return new Volunteer; } };
以上就是C++设想形式浅识工场要领形式的内容,更多相关内容请关注ki4网(www.ki4.cn)!