设计模式学习笔记(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,如需转载请自行联系原作者
目录
相关文章
|
7月前
|
设计模式 C++
设计模式之抽象工厂模式(C++)
设计模式之抽象工厂模式(C++)
|
7月前
|
设计模式 存储 Java
【设计模式——学习笔记】23种设计模式——备忘录模式Memento(原理讲解+应用场景介绍+案例介绍+Java代码实现)
【设计模式——学习笔记】23种设计模式——备忘录模式Memento(原理讲解+应用场景介绍+案例介绍+Java代码实现)
57 0
|
5月前
|
设计模式 Java
Java设计模式【三】:抽象工厂模式
Java设计模式【三】:抽象工厂模式
21 0
|
23天前
|
设计模式 Java
【设计模式系列笔记】抽象工厂模式
抽象工厂模式(Abstract Factory Pattern)是一种设计模式,属于创建型模式之一。它提供了一种方式来创建一系列相关或相互依赖的对象,而无需指定它们具体的类。抽象工厂模式通过引入抽象的工厂接口,使得客户端代码可以使用抽象的接口来创建一组相关的产品,而不关心这些产品的具体实现。
112 4
|
1月前
|
设计模式 Java Windows
23种设计模式,抽象工厂模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建相关或依赖对象的家族,而不需要指定具体类。该模式允许客户端在不知道具体类的情况下,通过其共同的接口来创建一组产品。
32 7
|
4月前
|
设计模式 Oracle 关系型数据库
设计模式 | 抽象工厂模式
设计模式 | 抽象工厂模式
25 0
|
4月前
|
设计模式 Go 开发工具
Golang设计模式——02抽象工厂模式
Golang设计模式——02抽象工厂模式
23 0
|
4月前
|
设计模式 前端开发
【设计模式】之抽象工厂模式
抽象工厂模式是一种创建型设计模式,适用于需要创建一系列相关或相互依赖对象的场景。在前端开发中,抽象工厂模式可以帮助我们更好地组织和管理代码,提高代码的可维护性和可扩展性。它通过封装对象的创建过程,使得客户端代码与具体类解耦,并且可以通过切换具体工厂类来改变整个系统的行为。然而,它也增加了系统的复杂度,并且当产品族较多时会导致大量的具体工厂类。因此,在使用抽象工厂模式时需要权衡利弊,并根据实际情况进行选择。
55 0
【设计模式】之抽象工厂模式
|
4月前
|
设计模式 NoSQL 中间件
设计模式 - 创建型模式_抽象工厂模式
设计模式 - 创建型模式_抽象工厂模式
23 0
|
5月前
|
设计模式
二十三种设计模式全面解析-抽象工厂模式:创造无限可能的工厂之道
二十三种设计模式全面解析-抽象工厂模式:创造无限可能的工厂之道