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实现多服务器共享SESSION数据的方法
Mar 16 PHP
php5编程中的异常处理详细方法介绍
Jul 29 PHP
php下批量挂马和批量清马代码
Feb 27 PHP
gd库图片下载类实现下载网页所有图片的php代码
Aug 20 PHP
php自动获取关键字的方法
Jan 06 PHP
php实现购物车功能(下)
Jan 05 PHP
php上传图片获取路径及给表单字段赋值的方法
Jan 23 PHP
PHP防止图片盗用(盗链)的方法小结
Nov 11 PHP
理清PHP在Linxu下执行时的文件权限方法
Jun 07 PHP
详解php框架Yaf路由重写
Jun 20 PHP
PHP 应用容器化以及部署方法
Feb 12 PHP
PHP排序算法之基数排序(Radix Sort)实例详解
Apr 21 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中选择什么接口(mysql、mysqli)访问mysql
2013/02/06 PHP
浅析PHP微信支付通知的处理方式
2014/05/25 PHP
解决CodeIgniter伪静态失效
2014/06/09 PHP
php面向对象的用户登录身份验证
2017/06/08 PHP
基于jquery的弹出提示框始终处于窗口的居中位置(类似于alert弹出框的效果)
2011/09/28 Javascript
JavaScript 里的类数组对象
2015/04/08 Javascript
jQuery实现仿QQ在线客服效果的滚动层代码
2015/10/15 Javascript
Easyui form combobox省市区三级联动
2016/01/13 Javascript
JavaScript程序中的流程控制语句用法总结
2016/05/23 Javascript
瀑布流的实现方式(原生js+jquery+css3)
2020/06/28 Javascript
jquery实现的回旋滚动效果完整实例【附demo源码下载】
2016/09/20 Javascript
Android中Okhttp3实现上传多张图片同时传递参数
2017/02/18 Javascript
angularjs中ng-bind-html的用法总结
2017/05/23 Javascript
vue loadmore组件上拉加载更多功能示例代码
2017/07/19 Javascript
移动web开发之touch事件实例详解
2018/01/17 Javascript
js实现飞机大战小游戏
2020/08/26 Javascript
vue组件讲解(is属性的用法)模板标签替换操作
2020/09/04 Javascript
Python threading多线程编程实例
2014/09/18 Python
python实现超简单端口转发的方法
2015/03/13 Python
Python中operator模块的操作符使用示例总结
2016/06/28 Python
利用Python实现图书超期提醒
2016/08/02 Python
Python MD5加密实例详解
2017/08/02 Python
Python2实现的LED大数字显示效果示例
2017/09/04 Python
python入门教程 python入门神图一张
2018/03/05 Python
python安装dlib库报错问题及解决方法
2020/03/16 Python
pandas中的ExcelWriter和ExcelFile的实现方法
2020/04/24 Python
Python Selenium库的基本使用教程
2021/01/04 Python
中国高端鲜花第一品牌:roseonly(一生只送一人)
2017/02/12 全球购物
总经理助理的八要求
2013/11/12 职场文书
机关门卫岗位职责
2013/12/30 职场文书
领导检查欢迎词
2014/01/14 职场文书
设计专业毕业生求职信
2014/06/25 职场文书
会计工作总结范文2014
2014/12/23 职场文书
实习生个人总结范文
2015/02/28 职场文书
幼儿教师师德培训心得体会
2016/01/09 职场文书
2016七夕情人节广告语
2016/01/28 职场文书