工厂模式和原型模式
1、工厂模式
面向抽象类编程,底下可以接N多个生产某种的具体工厂;
简单工厂模式:专门定义一个类来负责创建其它类的实例,被创建的实例通常都具有共同的父类;
2、具体实现
(1)、代码如下
#include<iostream>usingnamespacestd;classFruit{public:virtualvoidsayname()=0;private:};classBanana:publicFruit{public:voidsayname(){cout<<"我是香蕉"<<endl;}private:};classApple:publicFruit{public:voidsayname(){cout<<"我是苹果"<<endl;}private:};classAbFactory{public:virtualFruit*CreateProduct()=0;private:};classBananaFactory:publicAbFactory{public:virtualFruit*CreateProduct(){returnnewBanana;}private:};classAppleFactory:publicAbFactory{public:virtualFruit*CreateProduct(){returnnewApple;}private:};//添加新的产品classPear:publicFruit{public:voidsayname(){cout<<"我是pear"<<endl;}private:};classPearFactory:publicAbFactory{public:Fruit*CreateProduct(){returnnewPear;}private:};intmain(void){AbFactory*factory=NULL;Fruit*fruit=NULL;//吃香蕉factory=newBananaFactory;fruit=factory->CreateProduct();fruit->sayname();//吃梨factory=newPearFactory;fruit=factory->CreateProduct();fruit->sayname();deletefactory;return0;}
(2)、运行结果
(3)、工厂模式
扩展性不好;
3、原型模式
提供一个clone()接口,让普通对象拥有自我复制的功能!
相当于拷贝构造函数的编写;(当有成员为指针时)这个牵扯深拷贝和浅拷贝的问题;
4、具体实现
(1)、代码如下
#include<iostream>#include<string>usingnamespacestd;classPerson{public:virtualPerson*clone()=0;virtualvoidprintT()=0;private:};classCplus:publicPerson{public:Cplus(){m_name="";m_age=0;}Cplus(stringname,intage){m_name=name;m_age=age;}virtualvoidprintT(){cout<<"m_name:"<<m_name<<""<<"m_age:"<<m_age<<endl;}virtualPerson*clone(){Cplus*tmp=newCplus;*tmp=*this;returntmp;}private:stringm_name;intm_age;char*p;//此时就会牵扯深拷贝的问题};intmain(void){Cplus*c1=newCplus("张三",32);c1->printT();Person*c2=c1->clone();c2->printT();return0;}
(2)、运行结果
声明:本站所有文章资源内容,如无特殊说明或标注,均为采集网络资源。如若本站内容侵犯了原著者的合法权益,可联系本站删除。