设计模式-创建者模式

来源:互联网 发布:智能聊天机器人java 编辑:程序博客网 时间:2024/04/30 21:11

创建者模式

 

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

Demo

 

abstract class carModel{

    //这里存储所有组装车需要的零件

    public $spareParts = array();

    //车的名字

    public $carName = "";

    //增加轮子部件

    public abstract function addLunzi($xinghao);

    //增加外壳部件

    public abstract function addWaike($xinghao);

    //增加发动机部件

    public abstract function addFadongji($xinghao);

    //获取车,并给车取名字

    final public function getCar($carName){

        if($this->spareParts){

            $this->carName = $carName;

            //$k 代表部件名字

            //$v 代表型号

            foreach($this->spareParts as $k=>$v){

                $actionName = "add" . $k;

                $this->$actionName($v);

            }

        }else{

            throw new Exception("没有汽车部件");

        }

    }

}

 

//定义具体的产品

class bmwCarModel extends carModel{

    public $spareParts = array();

    public $carName = "";

    public function addLunzi($xinghao){

        echo "宝马".$this->carName."的轮子,型号是" . $xinghao . "\n";

    }

    public function addWaike($xinghao){

        echo "宝马".$this->carName."的外壳,型号是" . $xinghao . "\n";

    }

    public function addFadongji($xinghao){

        echo "宝马".$this->carName."的发动机,型号是" . $xinghao . "\n";

    }

}

//定义具体的产品

class benziCarModel extends carModel{

    public $spareParts = array();

    public $carName = "";

    public function addLunzi($xinghao){

        echo "奔驰".$this->carName."的轮子,型号是" . $xinghao . "\n";

    }

    public function addWaike($xinghao){

        echo "奔驰".$this->carName."的外壳,型号是" . $xinghao . "\n";

    }

    public function addFadongji($xinghao){

        echo "奔驰".$this->carName."的发动机,型号是" . $xinghao . "\n";

    }

}

//定义建造者

abstract class carBuilder{

    public abstract function setSpareParts($partsName , $xinghao);

    public abstract function getCarModel($name);

}

class bmwBuilder extends carBuilder{

    private $bmwModel;

    public function __construct(){

        $this->bmwModel = new bmwCarModel();

    }

    public function setSpareParts($partsName , $xinghao){

        $this->bmwModel->spareParts[$partsName] = $xinghao;

    }

    public function getCarModel($name){

        $this->bmwModel->getCar($name);

    }

}

class benziBuilder extends carBuilder{

    private $benziModel;

    public function __construct(){

        $this->benziModel = new benziCarModel();

    }

    public function setSpareParts($partsName , $xinghao){

        $this->bmwModel->spareParts[$partsName] = $xinghao;

    }

    public function getCarModel($name){

        $this->bmwModel->getCar($name);

    }

}

//模拟客户端调用

//创建一辆宝马车,取名字为宝马x1

$bmwBuilder = new bmwBuilder();

$bmwBuilder->setSpareParts('Lunzi' , '牛逼轮子1');

$bmwBuilder->setSpareParts('Waike' , '牛逼外壳1');

$bmwBuilder->setSpareParts('Fadongji' , '牛逼发动机1');

$bmwBuilder->getCarModel("宝马x1");

echo '</br>';

$bmwBuilder->getCarModel("宝马x1");  //连续创建两个宝马x1

echo '</br>';

//再创建一个宝马 没有外壳 取名为 宝马s5

$bmwBuilder = new bmwBuilder();

$bmwBuilder->setSpareParts('Lunzi' , '牛逼轮子2');

$bmwBuilder->setSpareParts('Fadongji' , '牛逼发动机2');

$bmwBuilder->getCarModel("宝马s5");

echo '</br>';

$bmwBuilder->getCarModel("宝马s5");  //连续创建两个宝马x1

0 0
原创粉丝点击