zoukankan      html  css  js  c++  java
  • 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);
    ?>
  • 相关阅读:
    F#周报2019年第40期
    F#周报2019年第39期
    F#周报2019年第38期
    python模块之time_random
    python小趣味_520绘制一个心形.
    python模块之json_pickle_shelve
    python基础17_列表推导式 vs 生成器表达式
    python基础16_闭包_装饰器
    Spark安装笔记
    python基础15下_迭代器_生成器
  • 原文地址:https://www.cnblogs.com/zxqblogrecord/p/9993823.html
Copyright © 2011-2022 走看看