zoukankan      html  css  js  c++  java
  • PHP设计模式工厂模式

    参考地址:https://www.zhihu.com/question/64379283

    作者:jack肖
    链接:https://www.zhihu.com/question/64379283/answer/219666440
    来源:知乎
    著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

    工厂模式分为三种:简单工厂工厂方法抽象工厂 ,三种工厂的区别是,抽象工厂由多条产品线,而工厂方法只有一条产品线,是抽象工厂的简化。而工厂方法和简单工厂相对,大家初看起来好像工厂方法增加了许多代码但是实现的功能和简单工厂一样。但本质是,简单工厂并未严格遵循设计模式的开闭原则,当需要增加新产品时也需要修改工厂代码。但是工厂方法则严格遵守开闭原则,模式只负责抽象工厂接口,具体工厂交给客户去扩展。在分工时,核心工程师负责抽象工厂和抽象产品的定义,业务工程师负责具体工厂和具体产品的实现。只要抽象层设计的好,框架就是非常稳定的。

     

    简单工厂

    优点:产品使用者不需要关心产品类的创建过程,与具体产品的实现类达到解耦的效果;

    缺点:违背"开放--封闭"原则(OCP),因为新增一个产品类的时候,需要修改原先的工厂方法;

    适用场合:当工厂类负责创建的对象比较少的时候;

    实现方法:定义一个简单共产类,并定义一个静态生产方法,根据传进来的type参数生成对应的具体父亲类

    具体代码如下

    <?php
    //抽象产品
    interface Person {
        public function getName(); 
    }
    
    //具体产品实现
    class Teacher implements Person {
        public function getName() {
            return "老师n";
        }
    }
    class Student implements Person {
        public function getName() {
            return "学生n";
        }
    }
    
    //简单工厂
    class SimpleFactory {
        public static function getPerson($type) {
          $person = null;
          if ($type == 'teacher') {
            $person = new Teacher();
          } elseif ($type == 'student') {
            $person = new Student();
          }
          return $person;
        }
    }
    
    //简单工厂调用
    class SimpleClient {
        function main() {
          // 如果不用工厂模式,则需要提前指定具体类
          // $person = new Teacher();
          // echo $person->getName();
          // $person = new Student();
          // echo $person->getName();
    
          // 用工厂模式,则不需要知道对象由什么类产生,交给工厂去决定
          $person = SimpleFactory::getPerson('teacher');
          echo $person->getName();
          $person = SimpleFactory::getPerson('student');
          echo $person->getName();
        }
    }
  • 相关阅读:
    Windows10 安装 MySQL 并开启远程访问
    Navicat Premium 12 破解教程
    基于 debian9 安装 Windows10 双系统 丢失引导文件的修复办法
    SD从零开始59-61,跨公司的库存转移,Interface 修改,可用性检查和需求传递
    SD从零开始57-58,第三方订单处理,跨公司销售
    SD从零开始55-56, 风险管理, 付款卡
    SD从零开始51-54 信用控制范围, 信用范围数据维护, 自动信用控制, 信用控制-阻止后续功能
    SD从零开始47-50, 装运成本基础、控制、结算, 信用/风险管理概述
    SD从零开始45-46
    SD从零开始41-44
  • 原文地址:https://www.cnblogs.com/gzyx1988/p/14522957.html
Copyright © 2011-2022 走看看