设计模式学习笔记(3) - 抽象工厂模式

简介:

 抽象工厂模式

用简单的话来描述一下简单工厂,工厂方法和抽象工厂最直观的区别:

  • 简单工厂是一个工厂生产某一类产品;
  • 工厂方法是用多个工厂来生产某一类产品;
  • 抽象工厂就是用多个工厂来生产多类产品;

这样说不够直观,下面用个例子来说明一下:

 
 
  1. /* 
  2.  * 抽象工厂模式是所有形态的工厂模式中最为抽象和最具一般性的一种形态。 
  3.  * 抽象工厂模式是指当有多个抽象角色时,使用的一种工厂模式。 
  4.  * 抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体的情况下,创建多个产品族中的产品对象。 
  5.  */ 
  6.  
  7. // 多个产品接口,用于产生产品族 
  8.   
  9. interface Box 
  10.     public function name(); 
  11.  
  12. interface Tree 
  13.     public function name(); 
  14.  
  15. // 实现产品 
  16.  
  17. class BigBox implements Box 
  18.     public function name()  
  19.     { 
  20.         echo "Big box\n"
  21.     } 
  22.  
  23. class SmallBox implements Box 
  24.     public function name() 
  25.     { 
  26.         echo "Small box\n"
  27.     } 
  28.  
  29. class BigTree implements Tree  
  30.     public function name()  
  31.     { 
  32.         echo "Big Tree\n"
  33.     } 
  34.  
  35. class SmallTree implements Tree  
  36.     public function name()  
  37.     { 
  38.         echo "Small Tree\n"
  39.     } 
  40.  
  41. // 工厂接口 
  42.  
  43. interface Builder 
  44.     public function buildBox(); 
  45.     public function buildTree(); 
  46.  
  47. // 创建两个工厂 
  48.  
  49. class BigBuilder implements Builder  
  50.     public function buildBox()  
  51.     { 
  52.         return new BigBox(); 
  53.     } 
  54.     public function buildTree()  
  55.     { 
  56.         return new BigTree(); 
  57.     } 
  58.  
  59. class SmallBuilder implements Builder  
  60.     public function buildBox()  
  61.     { 
  62.         return new SmallBox(); 
  63.     } 
  64.     public function buildTree()  
  65.     { 
  66.         return new SmallTree(); 
  67.     } 
  68.  
  69. // 调用 
  70. $BigBuilder = new BigBuilder(); 
  71. $box = $BigBuilder->buildBox(); 
  72. $box->name(); 
  73. $tree = $BigBuilder->buildTree(); 
  74. $tree->name(); 
  75.  
  76. $SmallBuilder = new SmallBuilder(); 
  77. $box = $SmallBuilder->buildBox(); 
  78. $box->name(); 
  79. $tree = $SmallBuilder->buildTree(); 
  80. $tree->name(); 

输出结果:

 
 
  1. Big box 
  2. Big Tree 
  3. Small box 
  4. Small Tree 

 










本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1032731,如需转载请自行联系原作者
目录
相关文章
|
6月前
|
设计模式
**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合
【6月更文挑战第23天】**工厂模式与抽象工厂模式**都是创建型设计模式,用于封装对象创建,减少耦合。工厂模式专注于单个对象,通过具体工厂创建具体产品,适用于简单对象创建;抽象工厂则关注一系列相关产品,提供创建一族对象的接口,适用于处理多个不兼容产品族。选择模式基于问题域的复杂性,单个产品需求时用工厂模式,多产品族时用抽象工厂模式。
34 5
|
2月前
|
设计模式 Java Kotlin
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
Kotlin学习笔记 - 改良设计模式 - 迭代器模式
33 2
|
7月前
|
设计模式 Java
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
【设计模式】JAVA Design Patterns——Abstract Factory(抽象工厂模式)
|
7月前
|
设计模式 Java
Java一分钟之-设计模式:工厂模式与抽象工厂模式
【5月更文挑战第17天】本文探讨了软件工程中的两种创建型设计模式——工厂模式和抽象工厂模式。工厂模式提供了一个创建对象的接口,延迟实例化到子类决定。过度使用或违反单一职责原则可能导致问题。代码示例展示了如何创建形状的工厂。抽象工厂模式则用于创建一系列相关对象,而不指定具体类,但添加新产品可能需修改现有工厂。代码示例展示了创建颜色和形状的工厂。根据需求选择模式,注意灵活性和耦合度。理解并恰当运用这些模式能提升代码质量。
70 2
|
2月前
|
设计模式 JavaScript Scala
Kotlin学习笔记 - 改良设计模式 - 责任链模式
Kotlin学习笔记 - 改良设计模式 - 责任链模式
47 0
|
2月前
|
设计模式 Java Kotlin
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
Kotlin 学习笔记- 改良设计模式 - 装饰者模式
32 0
|
3月前
|
设计模式 Java
Java设计模式-抽象工厂模式(5)
Java设计模式-抽象工厂模式(5)
|
7月前
|
设计模式 Java
【设计模式系列笔记】抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种设计模式,属于创建型模式之一。它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式通过引入抽象的工厂接口,使得客户端代码可以使用抽象的接口来创建一组相关的产品,而不关心这些产品的具体实现。
245 4
|
4月前
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
46 1
|
4月前
|
设计模式 XML 存储
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)
文章详细介绍了抽象工厂模式,这是一种创建型设计模式,用于提供一个接口以创建一系列相关或相互依赖的对象,而不指定它们具体的类。通过代码示例和结构图,文章展示了抽象工厂模式的动机、定义、结构、优点、缺点以及适用场景,并探讨了如何通过配置文件和反射机制实现工厂的动态创建。
【三】设计模式~~~创建型模式~~~抽象工厂模式(Java)