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 相关文章推荐
mayfish 数据入库验证代码
Apr 30 PHP
新手学习PHP的一些基础知识分享
Jul 27 PHP
PHP警告Cannot use a scalar value as an array的解决方法
Jan 11 PHP
优化PHP程序的方法小结
Feb 23 PHP
ThinkPHP模板判断输出Present标签用法详解
Jun 30 PHP
PHP实现算式验证码和汉字验证码实例
Mar 09 PHP
PHP中返回引用类型的方法
Apr 03 PHP
thinkPHP实现MemCache分布式缓存功能
Mar 23 PHP
用HTML/JS/PHP方式实现页面延时跳转的简单实例
Jul 18 PHP
php获取服务器操作系统相关信息的方法
Oct 08 PHP
PHP中phar包的使用教程
Jun 14 PHP
PHP数据分析引擎计算余弦相似度算法示例
Aug 08 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
完美实现GIF动画缩略图的php代码
2011/01/02 PHP
解析php中mysql_connect与mysql_pconncet的区别详解
2013/05/15 PHP
Drupal读取Excel并导入数据库实例
2014/03/02 PHP
PHP排序算法之快速排序(Quick Sort)及其优化算法详解
2018/04/21 PHP
PHP7.1实现的AES与RSA加密操作示例
2018/06/15 PHP
PHP htmlspecialchars() 函数实例代码及用法大全
2018/09/18 PHP
MooTools 1.2中的Drag.Move来实现拖放
2009/09/15 Javascript
jQuery EasyUI API 中文文档 - ProgressBar 进度条
2011/09/29 Javascript
JS.GetAllChild(element,deep,condition)使用介绍
2013/09/21 Javascript
js实现遮罩层划出效果是生成div而不是显示
2014/07/29 Javascript
cookie的secure属性详解
2015/04/08 Javascript
JS实现带提示的星级评分效果完整实例
2015/10/30 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
nodejs个人博客开发第二步 入口文件
2017/04/12 NodeJs
NodeJS实现微信公众号关注后自动回复功能
2017/05/31 NodeJs
详解vue.js数据传递以及数据分发slot
2018/01/20 Javascript
vue 使用html2canvas将DOM转化为图片的方法
2018/09/11 Javascript
Javascript实现时间倒计时功能
2018/11/17 Javascript
JS数组进阶示例【数组的几种函数用法】
2020/01/16 Javascript
Vue中keep-alive 实现后退不刷新并保持滚动位置
2020/03/17 Javascript
vue3自定义dialog、modal组件的方法
2021/01/04 Vue.js
举例详解Python中的split()函数的使用方法
2015/04/07 Python
Python  pip安装lxml出错的问题解决办法
2017/02/10 Python
python3之微信文章爬虫实例讲解
2017/07/12 Python
PyTorch实现AlexNet示例
2020/01/14 Python
基于python连接oracle导并出数据文件
2020/04/28 Python
详解CSS3中border-image的使用
2015/07/18 HTML / CSS
CSS3实现超酷的黑猫警长首页
2016/04/26 HTML / CSS
戴森美国官网:Dyson美国
2016/09/11 全球购物
早晨薰衣草在线女性精品店:Morning Lavender
2021/01/04 全球购物
Made in Design意大利:现代家具、名家灯具和装饰
2020/10/27 全球购物
校长岗位职责
2013/11/26 职场文书
大学生2014全国两会学习心得体会
2014/03/10 职场文书
公司聘任书模板
2014/03/29 职场文书
教师爱岗敬业演讲稿
2014/05/05 职场文书
2014教师评职称工作总结
2014/11/10 职场文书