Abstract Factory模式

创建一系列相关或相互依赖的对象(产品族)的接口,而无须指定他们的具体类

1.需要使用很多产品系列中的一个系列,不能几个系列的产品一起用,用该模式可以强制做到这一点。

2.用户只使用抽象工厂以及抽象产品提供的接口,用户不知道具体产品的名字(类名),这些名字不出现在客户端代码中。用户要转换到另一个产品族,只需转换到另一个具体的工厂类就可以了。

3.一般将工厂实现为Singleton

4.与Factory Method的区别:工厂方法中,一个具体的工厂只负责创建一种类型的产品,而抽象工厂中一个具体的工厂要负责一系列的产品(一个产品族)。增加一个新的产品族就要对应增加一个具体的工厂来创建他们。

5.难以支持新种类的产品。如果增加一种抽象产品,也就是在每个产品族中增加另一种产品,这种情况下需要修改抽象工厂的接口(增加一个接口,如CreatAnotherProduct),然后再其所有子类中实现该接口。不满足开闭原则。一种解决办法是让抽象工厂只提供一个接口:Product* AbstractFactory::Creat(String ProductType),用一个参数表明要创建什么产品,如Button,TextField等。但是这样做,对返回的结果需要强制类型转换,即将Product*向下转型到ProductType对应的类型。

6.可以方便的增加一个新的产品族:增加一个新的产品族就要对应增加一个具体的工厂来创建他们。但是增加一个新的种类的产品就比价麻烦。即上述第4、5点。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值