- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
详解工厂函数(factoryfunction)
设计模式的实现---工厂方法模式(C++)工厂函数用于创建类型未知的对象。类对象的普通构造函数的约束见PDF文档《工厂方法》。下面说明两种工厂函数的表达方式,方式一简单易懂;方式二灵活多变。方式一:简单工厂方法定义:抽象工厂是负责创建对象的接口,具体对象的创建工作由实现抽象工厂类的具体工厂完成。原理:工厂方法模式主要由四部分组成:抽象基类:抽象基类是定义了所有派生类共有行为的抽象单元,约定了所有派生类型所必须遵守的合同;具体的实现类:所有的具体实现类public继承该抽象基类(is-a的关系,如果抽象基类所有的函数都是纯虚函数,那么实现的是接口继承),并在所有的派生类中定义抽象类的纯虚函数的各自实现;抽象工厂类:创建具体实现类的对象的接口类,通过抽象工厂类可以创建不同类型的具体实现类;抽象工厂类的实现类:负责创建具体实现类的抽象工厂基类的实现类,采用public继承(is-a关系),该类的个数与抽象基类的实现类的个数是相同的,二者之间存在意义对应关系。优点:客户端不负责对象的创建工作,而是把创建的具体任务交给了具体的工厂类,客户端只是负责对象的调用,从而明确了各个类的职责。如果有新的派生类加入,只需创建一个具体的工厂类以及抽象基类的对应实现类就可以了,不会影响原来的代码,后期维护更加容易,增强了系统的可扩展性。缺点:使用该模式需要额外的增加代码,增加了工作量;其调用方式如下:Abstract factory* factory_ptr=new 具体的factory实现类;Abstract class* object_ptr=factory_ptr-创建函数;Object_ptr-其余的函数;deleteobject_ptr;deletefactory_ptr;由于一般抽象工厂类的指针是动态创建,因此需要delete掉;创建函数一般也是内含动态创建的对象,因此需要delete掉相应的指针,释放内存。示例代码:classIHuman//抽象基类,不能创建该类型的对象,但是可以创建//向该类型对象的指针或者引用{public:IHuman(void){}~IHuman()//用作基类的类需要定义虚析构函数{}virtualvoid Laugh() = 0; //纯虚函数,派生类中必须重新声明,定义自己的版本virtualvoid Cry() = 0;virtualvoid Talk() = 0;};classWhiteHuman : publicIHuman{public:WhiteHuman(void){}~WhiteHuman(void){}void Laugh(){std::cout 白种人笑! std::endl;}void Cry(){std::cout 白种人哭! std::endl;}void Talk(){std::cout 白种人说话! std::endl;}};classYellowHuman : publicIHuman{public:YellowHuman(void){}~YellowHuman(void){}void Laugh(){std::cout 黄种人笑! std::endl;}void Cry(){std::cout 黄种人哭! std::endl;}void Talk(){std::cout 黄种人说话! std::endl;}};classBlackHuman : publicIHuman{public:BlackHuman(void){}~BlackHuman(void){}void Laugh(){std::cout 黑种人笑! std::endl;}void Cry(){std::cout 黑种人哭! std::endl;}void Talk(){std::cout 黑种人说话! std::endl;}};classIHumanFactory//抽象工厂基类{public:IHumanFactory(void){}~IHumanFactory(void){}virtualIHuman* CreateHuman() = 0; //抽象基类的创建函数,内部一般含有new创建的对//象};classWhiteHumanFactory : publicIHumanFactory{public:WhiteHumanFactory(void){}~WhiteHumanFactory(void){}IHuman *CreateHuman()//具体实现类的创建函数,用于创建具体的对象{returnnewWhiteHuman();}};classYellowHumanFactory : publicIHumanFactory{public:YellowHuman
您可能关注的文档
最近下载
- 大连市跨境电商综合实验区建设的SWOT分析【论文范文】.doc VIP
- “一带一路”下我国物流企业与跨境电商协同发展研究论文.doc VIP
- bga返修台_zm-r5860说明书8800元.pdf VIP
- 药物外渗的预防及处理试题.docx
- 2025年辽宁中考英语试题【附答案】.doc
- 传统企业向跨境电商转型的模式及运营机理论文.doc VIP
- 老年保健卫生知识竞赛100题及答案.pdf VIP
- 西南18J515_室内装修 标准图集.pdf VIP
- Dell戴尔Dell Latitude 12 Rugged Extreme – 7214 用户手册.pdf
- 全球价值链与跨境电商研究.pptx VIP
文档评论(0)