抽象工厂模式:

  抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。

抽象工厂模式包含如下角色:

  • AbstractFactory:抽象工厂
  • ConcreteFactory:具体工厂
  • AbstractProduct:抽象产品
  • Product:具体产品

UML图:

   

优点:

  • 抽象工厂模式隔离了具体类的生成,使得客户并不需要知道什么被创建。由于这种隔离,更换一个具体工厂就变得相对容易。所有的具体工厂都实现了抽象工厂中定义的那些公共接口,因此只需改变具体工厂的实例,就可以在某种程度上改变整个软件系统的行为。另外,应用抽象工厂模式可以实现高内聚低耦合的设计目的,因此抽象工厂模式得到了广泛的应用。
  • 当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。这对一些需要根据当前环境来决定其行为的软件系统来说,是一种非常实用的设计模式。
  • 增加新的具体工厂和产品族很方便,无须修改已有系统,符合“开闭原则”。

缺点: 

  • 在添加新的产品对象时,难以扩展抽象工厂来生产新种类的产品,这是因为在抽象工厂角色中规定了所有可能被创建的产品集合,要支持新种类的产品就意味着要对该接口进行扩展,而这将涉及到对抽象工厂角色及其所有子类的修改,显然会带来较大的不便。
  • 开闭原则的倾斜性(增加新的工厂和产品族容易,增加新的产品等级结构麻烦)。

在以下情况下可以使用抽象工厂模式:

  • 一个系统不应当依赖于产品类实例如何被创建、组合和表达的细节,这对于所有类型的工厂模式都是重要的。
  • 系统中有多于一个的产品族,而每次只使用其中某一产品族。
  • 属于同一个产品族的产品将在一起使用,这一约束必须在系统的设计中体现出来。
  • 系统提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现。

区别:
  工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个。
  工厂方法模式的具体工厂类只能创建一个具体产品类的实例,而抽象工厂模式可以创建多个

最新文章

  1. spring使用cache
  2. javascript基础二数据类型
  3. Javascript添加事件的addEventListener()及attachEvent()区别分析,事件委托
  4. 如何更改UITextField 的placeholder 的字体颜色
  5. 如何管理linux开机自启服务
  6. SqlServer性能优化 手工性能收集动态管理视图(三)
  7. centos 6.3 搭建git/gitosis/gitweb
  8. winform代码:关联窗体数据更新,删除dataGridview中选中的一行或多行
  9. akoj-1076-Encoding
  10. 帧同步(LockStep)该如何反外挂
  11. Android开发:APK的反编译(获取代码和资源文件)
  12. WPF常见主界面的布局
  13. ionic3 npm install cordova error syscall rename
  14. VS中生成时“sgen.exe”已退出,代码为 1解决办法
  15. codeforces 555b//Case of Fugitive// Codeforces Round #310(Div. 1)
  16. 微信小程序之分享,动态添加分享数据
  17. 吐血推荐250部必看电影下载 IMDB TOP 250 download
  18. CSS cursor 属性
  19. CloudStack 4.3功能前瞻
  20. Apache Shiro:【1】Shiro基础及Web集成

热门文章

  1. leveldb学习:DBimpl
  2. Trie(前缀树)和ternary trie和binary search tree
  3. android使用两种方式注冊receiver
  4. idea自定义文档注释模板
  5. GridView认识(一)
  6. 配置JDK环境变量配置及path和classpath的作用
  7. iOS 7 present/dismiss转场动画
  8. bzoj 4543 HOTEL 加强版
  9. 【POJ 1155】TELE
  10. 返回一个集合对象,同时这个集合的对象的属性又是一个集合对象的处理方法(ViewModel)