• php-建造者模式(Builder)解析


    其与抽象模式相类似,都可以创建复杂的对象,但是抽象工厂更注重多个系列的产品对象,而Builder模式则着重于一步一步的构建一个复杂的对象,在最后一步才返回产品,

    使用建造者模式的好处是:

    1.将构造代码和表示代码相分离;

    2.可以改变产品内部的表达方式

    <?php
    class Product
    {
      public$_type=null;
      public$_size=null;
      public$_color=null;
    
      public function setType($type)
      {
        echo"set product type<br/>";
        $this->_type =$type;
      }
    
      public function setSize($size)
      {
        echo"set product size<br/>";
        $this->_size =$size;
      }
    
      public function setColor($color)
      {
        echo"set product color<br/>";
        $this->_color =$color;
      }
    }
    
    $config=array(
      "type"=>"shirt",
      "size"=>"xl",
      "color"=>"red",
    );
    
    //没有使用bulider以前的处理
    $oProduct=new Product();
    $oProduct->setType($config['type']);
    $oProduct->setSize($config['size']);
    $oProduct->setColor($config['color']);
    
    //创建一个builder类
    class ProductBuilder
    {
      var$_config=null;
      var$_object=null;
    
      public function ProductBuilder($config)
      {
        $this->_object =new Product();
        $this->_config =$config;
      }
    
      public function build()
      {
        echo"--- in builder---<br/>";
        $this->_object->setType($this->_config['type']);
        $this->_object->setSize($this->_config['size']);
        $this->_object->setColor($this->_config['color']);
      }
    
      public function getProduct()
      {
        return $this->_object;
      }
    }
    
    $objBuilder=new ProductBuilder($config);
    $objBuilder->build();
    $objProduct=$objBuilder->getProduct();
    

      

  • 相关阅读:
    Centos7创建systemctl服务
    in a frame because it set 'X-Frame-Options' to 'sameorigin'
    systemd-journald服务占用CPU过高
    Centos7修改了最大文件打开数不生效
    Docker部署Redis主从和哨兵
    基于Vue的前端项目访问首页刷新后报404
    npm的.npmrc文件在哪里?缓存及全局包文件在什么位置?
    react native 淘宝镜像
    react native 示例代码
    iOS9 & iOS10 & iOS11 HTTP 不能正常使用的解决办法
  • 原文地址:https://www.cnblogs.com/EvanHe/p/5473525.html
Copyright © 2020-2023  润新知