当前位置:首页 > PHP教程 > php应用 > 列表

PHP设计模式之抽象工厂模式实例分析

发布:smiling 来源: PHP粉丝网  添加日期:2021-11-14 11:44:19 浏览: 评论:0 

这篇文章主要介绍了PHP设计模式之抽象工厂模式,结合实例形式分析了php抽象工厂模式的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下。

本文实例讲述了PHP设计模式之抽象工厂模式,分享给大家供大家参考,具体如下:

前面的文章说了PHP下的简单工厂(静态工厂) 和工厂模式,现在说一下抽象工厂模式

工厂模式我们已经说过,增加一个产品很简单,增加对应的产品类和工厂类,不需要对原有代码进行改动,符合开闭原则

现在接着上篇文章,我们又有了新的需求,我们要求苹果味饮料和香蕉味饮料,有百事和可口可乐两个品牌,用工厂模式,就实现不了了,我只能增加单一的产品,但是增加品牌我实现不了,引申而出抽象工厂模式,代码如下:

  1. <?php 
  2. /** 
  3.  * Created by PhpStorm. 
  4.  * User: tiansi 
  5.  * Date: 18/1/23 
  6.  * Time: 下午5:10 
  7.  */ 
  8. //工厂接口 
  9. interface FruitFactory{ 
  10.   //生产饮料方法 
  11.   function makeAppleFruit(); 
  12.   function makeBananaFruit(); 
  13. //饮料接口 
  14. interface Fruit{ 
  15.   function getFruitName(); 
  16. class BaishiAppleFruit implements Fruit{ 
  17.   function getFruitName() 
  18.   { 
  19.     echo '百事苹果味饮料'
  20.   } 
  21. class BaishiBananaFruit implements Fruit{ 
  22.   function getFruitName() 
  23.   { 
  24.     echo '百事香蕉味饮料'
  25.   } 
  26. class ColeiAppleFruit implements Fruit{ 
  27.   function getFruitName() 
  28.   { 
  29.     echo '可口可乐苹果味饮料'
  30.   } 
  31. class ColeBananaFruit implements Fruit{ 
  32.   function getFruitName() 
  33.   { 
  34.     echo '可口可乐香蕉味饮料'
  35.   } 
  36. //百事饮料工厂 
  37. class BaishiFruitFactory implements FruitFactory{ 
  38.   function makeAppleFruit() 
  39.   { 
  40.     //生产百事苹果饮料 
  41.     return new BaishiAppleFruit(); 
  42.   } 
  43.   function makeBananaFruit() 
  44.   { 
  45.     //生产百事香蕉饮料 
  46.     return new BaishiBananaFruit(); 
  47.   } 
  48. //可口可乐饮料工厂 
  49. class ColeFruitFactory implements FruitFactory{ 
  50.   function makeAppleFruit() 
  51.   { 
  52.     //生产可口可乐苹果饮料 
  53.     return new ColeiAppleFruit(); 
  54.   } 
  55.   function makeBananaFruit() 
  56.   { 
  57.     //生产可口可乐香蕉味饮料 
  58.     return new ColeBananaFruit(); 
  59.   } 
  60. $baishi_factory = new BaishiFruitFactory(); 
  61. $baishi_factory->makeAppleFruit()->getFruitName(); 
  62. echo "<br/>"
  63. $baishi_factory->makeBananaFruit()->getFruitName(); 
  64. echo "<br/>"
  65. $cole_factory = new ColeFruitFactory(); 
  66. $cole_factory->makeAppleFruit()->getFruitName(); 
  67. echo "<br/>"
  68. $cole_factory->makeBananaFruit()->getFruitName(); 

运行结果:

百事苹果味饮料

百事香蕉味饮料

可口可乐苹果味饮料

可口可乐香蕉味饮料

现在我们可以看到 如果想要再增加一个品牌的话 只需要再写一个工厂类 并写上对应的产品类 就可以在不改动原有代码的前提下 成功增加品牌。

但是这会儿想要再增加一个单一产品,就很麻烦了,需要更改工厂类,这就是工厂和抽象工厂的区别。

工厂模式针对于单一产品,一个产品抽象类,每个工厂只能创建一个产品,支持扩展单个产品,不支持扩展产品族,针对一个产品等级结构。

抽象工厂针对于产品族,多个产品抽象类,每个工厂能创建多个产品,支持扩展产品族,不支持扩展单个产品,针对多个产品等级结构。

Tags: PHP设计模式 PHP工厂模式

分享到: