• php设计模式之建造者模式


    1 模式介绍



     是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示

    2.类设计

    <?php
     
    /** 
     * 建造者模式
     * copyright (c) http://blog.csdn.net/CleverCode   
     */  
     
    //需要建造的产品(product)
    class Car
    {/*{{{*/
        public $name;
        public $engine;//发动机
        public $chassis;//底盘
        public $body;//车身
        public $equipment;//电器设备
     
        public function setName($name)
        {
            $this->name = $name;
        }
     
        public function setEngine($engine)
        {
            $this->engine = $engine;
        }
     
        public function setChassis($chassis)
        {
            $this->chassis = $chassis;
        }
     
        public function setBody($body)
        {
            $this->body = $body;
        }
     
        public function setEquipment($equipment)
        {
            $this->equipment = $equipment;
        }
     
        public function show()
        {
            echo "名称:".$this->name."
    ";
            echo "引擎:".$this->engine."
    ";
            echo "底盘:".$this->chassis."
    ";
            echo "车身:".$this->body."
    ";
            echo "电子设备:".$this->equipment."
    ";
     
        }
     
    }/*}}}*/
     
    //builder
    interface IBuilder
    {/*{{{*/
        public function builderName();
        public function builderEngine();
        public function builderChassis();
        public function builderBody();
        public function builderEquipment();
        public function getCar();
    }/*}}}*/
     
    //红旗车builder
    class RedBuilder implements IBuilder
    {/*{{{*/
        public $car;
     
        public function __construct()
        {
            $this->car = new Car();
        }
     
        public function builderName()
        {
            $this->car->setName('红旗'); 
        }
     
        public function builderEngine()
        {
            $this->car->setEngine('国产发动机'); 
        }
     
        public function builderChassis()
        {
            $this->car->setChassis('超大底盘'); 
        }
     
        public function builderBody()
        {
            $this->car->setBody('超大'); 
        }
        public function builderEquipment()
        {
            $this->car->setEquipment('电子设备'); 
        }
     
        public function getCar()
        {
            return $this->car;
        }
     
    }/*}}}*/
     
    //QQ车builder
    class QQBuilder implements IBuilder
    {/*{{{*/
        public $car;
     
        public function __construct()
        {
            $this->car = new Car();
        }
     
        public function builderName()
        {
            $this->car->setName('QQ'); 
        }
     
        public function builderEngine()
        {
            $this->car->setEngine('国产发动机'); 
        }
     
        public function builderChassis()
        {
            $this->car->setChassis('小底盘'); 
        }
     
        public function builderBody()
        {
            $this->car->setBody('小'); 
        }
        public function builderEquipment()
        {
            $this->car->setEquipment('电子设备'); 
        }
     
        public function getCar()
        {
            return $this->car;
        }
    }/*}}}*/
     
    //组装者(director)
    class CarDirector
    {/*{{{*/
        public function make(IBuilder $builder)
        {
            $builder->builderName();
            $builder->builderEngine();
            $builder->builderChassis();
            $builder->builderBody();
            $builder->builderEquipment();
            return $builder->getCar();
        }
    }/*}}}*/
     
    class Client
    {/*{{{*/
        public static function main($argv)
        {
            $director = new CarDirector(); 
            $redBuilder = new RedBuilder();
            $car = $director->make($redBuilder);
            $car->show();
     
            echo "
    ";
            $qqBuilder = new QQBuilder();
            $car = $director->make($qqBuilder);
            $car->show();
        }
    }/*}}}*/
    Client::main($argv);
    ?>
  • 相关阅读:
    Java_Habse_add
    Java_Habse_shell
    android Studio 出现:Unable to resolve dependency for ':app@debug/compileClasspath'
    微信小程序云函数中有以下未安装的依赖,如果未安装即全量上传
    Bittorrent Protocol Specification v1.0 中文
    BT客户端实现 Peer协议设计
    NGINX 配置 SSL 双向认证
    openssl、x509、crt、cer、key、csr、ssl、tls 这些都是什么鬼?
    ssl双向认证和单向认证原理
    网络服务器之HTTPS服务
  • 原文地址:https://www.cnblogs.com/zxqblogrecord/p/9993823.html
Copyright © 2020-2023  润新知