1. 工厂模式
- 什么是简单工厂模式?
答:使用一个单独的类来做创建势力的过程,就是工厂。比如:
(1)有两个类:class RequestCodec : public Codec
和class RespondCodec : public Codec
,两个类都继承抽象类class Codec
;
(2)若要创建两个类的对象时,需要直接调用该类的构造函数;
(3)但若使用工厂模式,可以直接创建工厂类的对象,通过调用工厂类中已经实现好的成员函数,根据传参不同来创建两个类的对象;
(4)通过工厂模式创建的两个类的对象是Codec类型对象,但由于多态,因此可以直接当作子类对象来使用。 - 简单工厂模式实现与使用?
//1. 两个类继承抽象类Codec
class RequestCodec : public Codec
class RespondCodec : public Codec
//2.创建工厂类
class BaseFactory
{
public:
BaseFactory(){}
~BaseFactory(){}
//2.1通过成员函数创建两个类的对象
Codec *createCodec(int flag)
{
Codec *c = NULL;
//根据传参不同,分别创建不同的类对象
if(flag == 1) //RequestCodec类
{
c = new RequestCodec();
}
else if(flag == 2) //RequestCodec类
{
c = new RespondCodec();
}
//返回Codec类型的对象
return c;
}
};
工厂类的使用
BaseFactory *fac = new BaseFactory(); //创建工厂类对象
Codec *codec = fac.createCodec(1); //生成父类对象指针
codec->encodemsg(); //通过多态,父类指针指向子类对象
- 什么是工厂模式?
答:(1)简单工厂模式只有一个工厂类,使用时只要传入不同的参数,就可以创建不同类的对象。但若要增加新的类到工厂类时,就需要修改工厂类的代码,扩展性差。
(2)而工厂模式可以创建多个工厂类,所有工厂类都继承一个抽象类工厂基类,且每个工厂类只用来生成一种类的对象,使用时创建基类的工厂类对象指针,通过多态就可以调用不同派生工厂类中成员函数,以此来创建不同的类对象。若要创建新的类的对象时,只需要增加工厂类的派生类即可,而不许修改工厂类的代码。 - 工厂模式的实现及使用?
//1.两个类都继承抽象类Codec
class RequestCodec : public Codec
class RespondCodec : public Codec
//2.创建工厂类基类
class BaseFactory
{
public:
BaseFactory(){}
//工厂派生类必须要创建Codec不同派生类的对象
virtual Codec *createCodec();
~BaseFactory(){}
};
//3.创建工厂派生类,每个类之创建一种类对象
class RequestFactory
{
RequestFactory(){}
//创建RequestCodec对象函数
Codec *createRequest()
{
RequestCodec *req = new RequestCodec()
return req;
}
~RequestFactory(){}
};
class RespondFactory
{
RespondFactory(){}
//创建RespondCodec对象函数
Codec *createRequest()
{
RespondCodec *req = new RespondCodec()
return req;
}
~RespondFactory(){}
};
工厂类的使用
//创建工厂基类对象指针指向工厂派生类对象
BaseFactory *BF = new RequestFactory();
//通过多态,基类对象指针调用派生类成员函数来创建指定类基类的对象指针
Codec *codec = BF->creatRequest();
//通过多态,基类对象指针调用派生类成员函数
codec->encodeMsg();
来源:CSDN
作者:向测
链接:https://blog.csdn.net/weixin_45093118/article/details/104632864