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

     更新时间:2019年03月25日 11:19:26   作者:12345987   我要评论

    这篇文章主要介绍了PHP设计模式之抽象工厂模式,结合实例形式分析了php抽象工厂模式的概念、原理、使用方法及相关操作注意事项,需要的朋友可以参考下

    本文实例讲述了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 '可口可?#21046;?#26524;味饮料';
      }
    }
    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()
      {
        //生产可口可?#21046;?#26524;饮料
        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();
    
    

    运行结果:

    百事苹果味饮料
    百事香蕉味饮料
    可口可?#21046;?#26524;味饮料
    可口可乐香蕉味饮料

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

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

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

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

    更多关于PHP相关内容?#34892;?#36259;的读者可查看本站专题:《php面向对象程序设计入门教程》、《PHP数组(Array)操作技巧大全》、《PHP基本语法入门教程》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总

    希望本文所述?#28304;?#23478;PHP程序设计有所帮助。

  2. PHP实现时间轴函数代码

    PHP实现时间轴函数代码

    我们在论坛发帖、发表评论、或者是使用QQ空间发布日志、微博发表言论时,会看到发表的内容后的时间显示为?#26696;?#21018;”、“5分钟前”、“昨天10:23”等,而不是直接显示具体日期和时间
    2011-10-10
  3. 解析link_mysql的php版

    解析link_mysql的php版

    本篇文章是对link_mysql的php版的实现进行了详细的分析介绍,需要的朋友参考下
    2013-06-06
  4. 抓取并下载CSS中所有?#35745;?#25991;件的php代码

    抓取并下载CSS中所有?#35745;?#25991;件的php代码

    今天就让 PHP 用正则式把 CSS 文件中的所有?#35745;?#25991;件,都从 CSS 原来的位置下载来吧。
    2011-09-09
  5. PHP读取配置文件类实例(可读取ini,yaml,xml等)

    PHP读取配置文件类实例(可读取ini,yaml,xml等)

    这篇文章主要介绍了PHP读取配置文件类,可读取ini,yaml,xml等配置文件,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-07-07
  6. PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析

    PHP5.0~5.6 各版本兼容性cURL文件上传功能实例分析

    这篇文章主要介绍了PHP5.0~5.6 各版本兼容性cURL文件上传功能,结合实例形式分析了php各个常见版本进行curl文件上传操作的相关实现技巧与注意事项,需要的朋友可以参考下
    2018-05-05
  7. PHP 和 MySQL 开发的 8 个技巧

    PHP 和 MySQL 开发的 8 个技巧

    PHP 和 MySQL 开发的 8 个技巧...
    2007-01-01
  8. PHP实现CSV文件的导入和导出类

    PHP实现CSV文件的导入和导出类

    这篇文章主要介绍了PHP实现CSV文件的导入和导出类,实例分析了php针对csv文件的操作技巧,非常具有实用价值,需要的朋友可以参考下
    2015-03-03
  9. 详解PHP序列化和反序列化原理

    详解PHP序列化和反序列化原理

    本篇文章给大家分享了下PHP反序列化漏洞系列之PHP序列化和反序列化原理的相关知识,有这方面需要的朋友参考学习下吧。
    2018-01-01
  10. PHP中isset与array_key_exists的区别实例分析

    PHP中isset与array_key_exists的区别实例分析

    这篇文章主要介绍了PHP中isset与array_key_exists的区别,较为详细的分析了isset与array_key_exists使用中的区别,并实例分析其具体用法,需要的朋友可以参考下
    2015-06-06
  11. 最新评论

    常用在线小工具

    山东群英会开奖查询
      1. 贵州快3攻略 双色球机选爱彩网 j江西时时彩 qq欢乐升级同花怎么打 体彩排列五走势图 35选7开奖查询今天 福彩快3买一千返3点 湖南快乐十分图表 中超球员太太团一览 彩票对账公式 qq三张牌看不到人 新山西11选5走势图-手机版 香港赛马会唯一指定 博彩网站评级2019 广西快乐10分开奖分布图开奖结果