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


Posted in PHP onMarch 25, 2019

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

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

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

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

<?php
/**
 * Created by PhpStorm.
 * User: tiansi
 * Date: 18/1/23
 * Time: 下午5:10
 */
//工厂接口
interface FruitFactory{
  //生产饮料方法
  function makeAppleFruit();
  function makeBananaFruit();
}
//饮料接口
interface Fruit{
  function getFruitName();
}
class BaishiAppleFruit implements Fruit{
  function getFruitName()
  {
    echo '百事苹果味饮料';
  }
}
class BaishiBananaFruit implements Fruit{
  function getFruitName()
  {
    echo '百事香蕉味饮料';
  }
}
class ColeiAppleFruit implements Fruit{
  function getFruitName()
  {
    echo '可口可乐苹果味饮料';
  }
}
class ColeBananaFruit implements Fruit{
  function getFruitName()
  {
    echo '可口可乐香蕉味饮料';
  }
}
//百事饮料工厂
class BaishiFruitFactory implements FruitFactory{
  function makeAppleFruit()
  {
    //生产百事苹果饮料
    return new BaishiAppleFruit();
  }
  function makeBananaFruit()
  {
    //生产百事香蕉饮料
    return new BaishiBananaFruit();
  }
}
//可口可乐饮料工厂
class ColeFruitFactory implements FruitFactory{
  function makeAppleFruit()
  {
    //生产可口可乐苹果饮料
    return new ColeiAppleFruit();
  }
  function makeBananaFruit()
  {
    //生产可口可乐香蕉味饮料
    return new ColeBananaFruit();
  }
}
$baishi_factory = new BaishiFruitFactory();
$baishi_factory->makeAppleFruit()->getFruitName();
echo "<br/>";
$baishi_factory->makeBananaFruit()->getFruitName();
echo "<br/>";
$cole_factory = new ColeFruitFactory();
$cole_factory->makeAppleFruit()->getFruitName();
echo "<br/>";
$cole_factory->makeBananaFruit()->getFruitName();

运行结果:

百事苹果味饮料
百事香蕉味饮料
可口可乐苹果味饮料
可口可乐香蕉味饮料

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

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

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

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

希望本文所述对大家PHP程序设计有所帮助。

PHP 相关文章推荐
织梦模板标记简介
Mar 11 PHP
不用mod_rewrite直接用php实现伪静态化页面代码
Oct 04 PHP
使ecshop模板中可引用常量的实现方法
Jun 02 PHP
PHP性能优化 产生高度优化代码
Jul 22 PHP
PHP--用万网的接口实现域名查询功能
Dec 13 PHP
WordPress中对访客评论功能的一些优化方法
Nov 24 PHP
php数组函数array_walk用法示例
May 26 PHP
php源码 fsockopen获取网页内容实例详解
Sep 24 PHP
PHP静态成员变量
Feb 14 PHP
php实现不通过扩展名准确判断文件类型的方法【finfo_file方法与二进制流】
Apr 18 PHP
[原创]PHP实现字节数Byte转换为KB、MB、GB、TB的方法
Aug 31 PHP
php获得刚插入数据的id 的几种方法总结
May 31 PHP
PHP设计模式之简单工厂和工厂模式实例分析
Mar 25 #PHP
PHP实现无限极分类的两种方式示例【递归和引用方式】
Mar 25 #PHP
详解PHP神奇又有用的Trait
Mar 25 #PHP
PHP自动载入类文件函数__autoload的使用方法
Mar 25 #PHP
PHP生成短网址的思路以及实现方法的详解
Mar 25 #PHP
PHP错误提示It is not safe to rely on the system……的解决方法
Mar 25 #PHP
mongodb和php的用法详解
Mar 25 #PHP
You might like
PHP对象转换为数组函数(递归方法)
2012/02/04 PHP
PHP 导出Excel示例分享
2014/08/18 PHP
PHP curl伪造IP地址和header信息代码实例
2015/04/27 PHP
yii2中添加验证码的实现方法
2016/01/09 PHP
smarty自定义函数用法示例
2016/05/20 PHP
Yii框架使用PHPExcel导出Excel文件的方法分析【改进版】
2019/07/24 PHP
laravel框架路由分组,中间件,命名空间,子域名,路由前缀实例分析
2020/02/18 PHP
JavaScript Archive Network 集合
2007/05/12 Javascript
javascript动画效果类封装代码
2007/08/28 Javascript
js中window.open()的所有参数详细解析
2014/01/09 Javascript
jQuery/CSS3图片特效插件整理推荐
2014/12/07 Javascript
jquery表单验证需要做些什么
2015/11/17 Javascript
Active控件问题小结(附解决办法)
2016/06/09 Javascript
Google 地图事件实例讲解
2016/08/06 Javascript
JavaScript基于DOM操作实现简单的数学运算功能示例
2017/01/16 Javascript
javascript深拷贝和浅拷贝详解
2017/02/14 Javascript
vue插件vue-resource的使用笔记(小结)
2017/08/04 Javascript
BootStrap模态框和select2合用时input无法获取焦点的解决方法
2017/09/01 Javascript
JavaScript伪数组用法实例分析
2017/12/22 Javascript
JavaScript运行机制实例分析
2020/04/11 Javascript
Python import用法以及与from...import的区别
2015/05/28 Python
Python中return语句用法实例分析
2015/08/04 Python
Python面向对象之类和对象实例详解
2018/12/10 Python
PyQt5实现五子棋游戏(人机对弈)
2020/03/24 Python
python仿evething的文件搜索器实例代码
2019/05/13 Python
Python的Tkinter点击按钮触发事件的例子
2019/07/19 Python
TensorFlow通过文件名/文件夹名获取标签,并加入队列的实现
2020/02/17 Python
DAWGS鞋官方网站:鞋,凉鞋,靴子
2016/10/04 全球购物
美国在线咖啡、茶和餐厅供应商:LollicupStore
2018/05/04 全球购物
澳大利亚运动鞋零售商:The Athlete’s Foot
2018/11/04 全球购物
非常详细的C#面试题集
2016/07/13 面试题
2014年小学元旦活动方案
2014/02/12 职场文书
大班上学期幼儿评语
2014/04/30 职场文书
三问三解心得体会
2014/09/05 职场文书
五一劳动节演讲稿
2014/09/12 职场文书
深入浅析React中diff算法
2021/05/19 Javascript