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 相关文章推荐
针对初学PHP者的疑难问答(1)
Oct 09 PHP
PHP读取ACCESS数据到MYSQL的代码
May 11 PHP
深入php socket的讲解与实例分析
Jun 13 PHP
PHP zip扩展Linux下安装过程分享
May 05 PHP
ThinkPHP的I方法使用详解
Jun 18 PHP
PHP实现加密的几种方式介绍
Feb 22 PHP
PHP实现微信发红包程序
Aug 24 PHP
PHPCMS2008广告模板SQL注入漏洞修复
Oct 11 PHP
PHP实现登录搜狐广告获取广告联盟数据的方法【附demo源码】
Oct 14 PHP
php实现支持中文的文件下载功能示例
Aug 30 PHP
PHP中命名空间的使用例子
Mar 22 PHP
laravel-admin解决表单select联动时,编辑默认没选上的问题
Sep 30 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
15个小时----从修改程序到自己些程序
2006/10/09 PHP
解析php中的fopen()函数用打开文件模式说明
2013/06/20 PHP
php图片的二进制转换实现方法
2014/12/15 PHP
Joomla调用系统自带编辑器的实现方法
2016/05/05 PHP
php处理多图上传压缩代码功能
2018/06/13 PHP
PHP中str_split()函数的用法讲解
2019/04/11 PHP
在修改准备发的批量美化select+可修改select时,在非IE下发现了几个问题
2007/01/09 Javascript
document.getElementById方法在Firefox与IE中的区别
2010/05/18 Javascript
JavaScript OOP面向对象介绍
2010/12/02 Javascript
Jquery下:nth-child(an+b)的使用注意
2011/05/28 Javascript
javascript nextSibling 与 getNextElement(node) 使用介绍
2011/10/13 Javascript
js在输入框屏蔽按键,只能键入数字的示例代码
2014/01/03 Javascript
JQuery+Ajax无刷新分页的实例代码
2014/02/08 Javascript
js数组依据下标删除元素
2015/04/14 Javascript
Vue.JS项目中5个经典Vuex插件
2017/11/28 Javascript
JavaScript门道之标准库
2018/05/26 Javascript
使用pkg打包Node.js应用的方法步骤
2018/10/19 Javascript
vuex存储复杂参数(如对象数组等)刷新数据丢失的解决方法
2019/11/05 Javascript
js实现树形数据转成扁平数据的方法示例
2020/02/27 Javascript
《与孩子一起学编程》python自测题
2018/05/27 Python
numpy中loadtxt 的用法详解
2018/08/03 Python
python实现淘宝秒杀脚本
2020/06/23 Python
Python Tkinter Entry和Text的添加与使用详解
2020/03/04 Python
纯CSS3代码实现switch滑动开关按钮效果
2016/08/30 HTML / CSS
HTML5单选框、复选框、下拉菜单、文本域的实现代码
2020/12/01 HTML / CSS
美国最大的团购网站:Groupon
2016/07/23 全球购物
如果NULL定义成#define NULL((char *)0)难道不就可以向函数传入不加转换的NULL了吗
2012/02/15 面试题
北京某公司的.net笔试题
2014/03/20 面试题
银行出纳岗位职责
2013/11/25 职场文书
作文评语大全
2014/04/23 职场文书
商业计算机应用专业自荐书
2014/06/09 职场文书
个人租房协议书范本
2014/09/30 职场文书
2019七夕节祝福语36句,快来收藏吧
2019/08/06 职场文书
只用40行Python代码就能写出pdf转word小工具
2021/05/31 Python
python使用BeautifulSoup 解析HTML
2022/04/24 Python
JS实现简单九宫格抽奖
2022/06/28 Javascript