创建型模式

1、抽象工程模式(Abstract  Factory)

适用性:一个系统由多个产品系列中的一个来配置。

类图:具体类图设计如下。client只需要关系产品系列的抽象类AbstractProductA,AbstractProductB。当使用产品系列中的factory1来配置该可获得时,A使用A1,B使用B1,当使用factory2来配置时,A使使用A2,B使用B2。可获得在初始化时确定使用new一个factory1或factory2来决定使用哪种工厂。

优点:易于交换产品系列。

缺点:难以支持产品 新种类,如需要CreateProductC,则修改较大。可以通过Make(int iType)来进行扩展。



2、对象创建型模式(Builder)

将对象的创建过程封装,单独提炼。builder着重的是一步步构造一个复杂对象。而抽象工厂着重与多个系列的产品对象。builder在最后一步返回产品。

builder.buildstep1(1, 2);

builder.buildstep2(3); 

...

return builder.GetResult();

Client决定如何构建。构建后获取到想要的结果值。

当构造过程灵活多变时比较适用。


3、工厂方法(Factory Method)

适用型:当一个类不知道它所必须创建的对象的类的时候。只知道一些创建需求。

当一个类希望由它的子类来指定它所创建的对象的时候。

3.1、直接适用接口,通过参数区分

Product* create(ProductId id)

{

if (id == MINE) return new MyProduct;

else if(id == YOURS) return YourProduct;

...

return 0;

}

3.2、封装在类中,方便子类特殊实现

class Creator

{

virtual Product* Create(ProductId id);

}


4、原型模型(Prototype)

实现Clone接口。new this指针。传参this调用拷贝构造函数,进行克隆一个新的一样的对象。

Door* Door::clone() const

{return new Door(*this);}

适用性:当实例化的类在运行时刻指定时。


5、单件(Singleton)


总结:通常设计以工厂方法开始,通常不能满足或需要更加灵活时,会考虑其它模型的使用。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值