• PHP工厂模式的好处


    顾名思义,工厂是可以加工零件的,PHP程序中的工厂模式也有相同的功能,可以方便的使用一个静态的工厂方法来实例化某一个类,那么这样做的好处是什么呢?初学PHP的设计模式,以下是我个人的理解

    一般我们实例化一个类会给它一些参数以便在其构析的时候可以根据不同的参数反馈出我们需要的结果。
    举例说明,以下是一个User类,非常简单:

    <?php

    interface IUser{
       function getName();
       function getAge();
    }

    class User implements IUser{
       protected $_name;
       protected $_age;

       function __construct($name, $age){
          $this->_name = $name;
          $this->_age = (int)$age;
       }

       function getName(){
          return $this->_name;
       }

      function getAge(){
          return $this->_age;
       }
    }

    ?>

    我们如果要实例化这个类就要这样:
    1.$u = new User(‘小明‘,19);
    一般如果这个类很少使用,那么这样做没什么太大影响,也非常好。
    突然我想给这个类增加一个归类,把小明放入学生组,修改下类代码实现非常容易,但如果这个类在我们想修改之前在很多文件地方多次的实例化了,那么想为其增加一个参数就会变的非常烦琐,因为需要替换成:
    1.$u = new User(‘小明‘,19,‘学生‘);
    当然我们也可以通过在__construct函数中进行默认值设置来避免这种重复劳动,但事实上从代码优雅角度来说这样很不好,设想我们有一个工厂方法可 以通过一个标识来对应一组参数,并把这个参数存放在某个文本文档或是直接以数组的形式存放在工厂类中,我们在调用User类的时候就会变的轻松许多,即便 是需要增减参数属性也不需要到处进行代码的替换,下面就是一个工厂类(也可以直接将方法存放在User类)

    interface IUser{
        function getName();
        function getAge();
    }

    class User implements IUser{
       protected $_group;
       protected $_name;
       protected $_age;

      function __construct($name, $age, $group){
          $this->_group = $group;
          $this->_name = $name;
          $this->_age = (int)$age;
      }

      function getName(){
         return $this->_name;
      }

      function getAge(){
          return $this->_age;
      }
    }

    class Fuser{
       private static $group = array(
           array(‘小明‘,19,‘学生‘),
           array(‘小王‘,19,‘学生‘)
       );

       static function create($id){
          list($name, $age, $group) = self::$group[(int)$id];
          return new User($name, $age, $group);
       }
    }

    echo Fuser::create(0)->getName();

  • 相关阅读:
    卫星天线基础知识点
    Compling_Windows_Server_2003
    抛物线天线的结构组成
    UHP Command List
    C波段卫星天线秒变Ku波段卫星天线
    FineUIPro/Mvc/Core v7.0.0 正式发布了!
    【新特性速递】表格行分组(续)
    【新特性速递】表格行分组(EnableRowGroup)
    【新特性速递】树表格复选框与级联选择(TreeCheckBox,TreeCascadeCheck)
    【新特性速递】平铺数字输入框的触发图标(NumberBoxTriggerType)
  • 原文地址:https://www.cnblogs.com/xingmeng/p/2887260.html
Copyright © 2020-2023  润新知