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实现验证码功能
Oct 09 PHP
PHP三层结构(上) 简单三层结构
Jul 04 PHP
PHP异步调用socket实现代码
Jan 12 PHP
VIM中设置php自动缩进为4个空格的方法详解
Jun 14 PHP
多个PHP中文字符串截取函数
Nov 12 PHP
PHP启动windows应用程序、执行bat批处理、执行cmd命令的方法(exec、system函数详解)
Oct 20 PHP
PHP实现加密的几种方式介绍
Feb 22 PHP
php中数据库连接方式pdo和mysqli对比分析
Feb 25 PHP
php函数实现判断是否移动端访问
Mar 03 PHP
PHP技术开发微信公众平台
Jul 22 PHP
PHP实现数组array转换成xml的方法
Jul 19 PHP
PHP扩展mcrypt实现的AES加密功能示例
Jan 29 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获取当前日期所在星期(月份)的开始日期与结束日期(实现代码)
2013/06/18 PHP
php登陆页的密码处理方式分享
2013/10/14 PHP
php调用shell的方法
2014/11/05 PHP
PHP删除指定目录中的所有目录及文件的方法
2015/02/26 PHP
PHP 年月日的三级联动实例代码
2017/05/24 PHP
php批量转换文件夹下所有文件编码的函数类
2017/08/06 PHP
php设计模式之适配器模式原理、用法及注意事项详解
2019/09/24 PHP
JS 新增Cookie 取cookie值 删除cookie 举例详解
2014/10/10 Javascript
jQuery读取XML文件内容的方法
2015/03/09 Javascript
JS数组合并push与concat区别分析
2015/12/17 Javascript
微信小程序 支付功能开发错误总结
2017/02/21 Javascript
JavaScript html5 canvas实现图片上画超链接
2017/10/20 Javascript
浅谈webpack组织模块的原理
2018/03/10 Javascript
浅谈node中的cluster集群
2018/06/02 Javascript
[34:39]Secret vs VG 2018国际邀请赛淘汰赛BO3 第二场 8.23
2018/08/24 DOTA
Python yield使用方法示例
2013/12/04 Python
Python中使用MELIAE分析程序内存占用实例
2015/02/18 Python
TensorFlow在MAC环境下的安装及环境搭建
2017/11/14 Python
python 提取key 为中文的json 串方法
2018/12/31 Python
python实现简单聊天室功能 可以私聊
2019/07/12 Python
python 控制Asterisk AMI接口外呼电话的例子
2019/08/08 Python
Django+uni-app实现数据通信中的请求跨域的示例代码
2019/10/12 Python
Python csv文件的读写操作实例详解
2019/11/19 Python
Python数据持久化存储实现方法分析
2019/12/21 Python
Python爬虫模拟登陆哔哩哔哩(bilibili)并突破点选验证码功能
2020/12/21 Python
Levi’s美国官网:美国著名的牛仔裤品牌
2016/08/19 全球购物
全球最大的中文旅行网站:去哪儿网
2017/11/16 全球购物
意大利在线药房:Farmacia Loreto Gallo
2019/08/09 全球购物
社区敬老月活动实施方案
2014/02/17 职场文书
小学生元旦感言
2014/02/26 职场文书
2014年五四青年节活动策划书
2014/04/22 职场文书
2014年妇联工作总结
2014/11/21 职场文书
初中生考试作弊检讨书
2014/12/14 职场文书
企业爱心捐款倡议书
2015/04/27 职场文书
同事打架检讨书
2015/05/06 职场文书
我在伊朗长大观后感
2015/06/16 职场文书