建造者模式,也叫生成器模式。是设计模式的一种。某个复杂算法类,在方法调用上是顺序稳定的,但是具体属性不同,此时可以使用建造者模式。
建造者模式:一个复杂的对象,我们把它的构造和它的表示分离,可以实现同样的构造,而产生多种不同的表示,这种设计模式我们把它叫做建造者模式,也被成为生成器模式。顾名思义,在一个厂房中批量生成。
在定义和开发时,必须要满足:1、我们开发的类,允许被它的对象有多种不同的表示。2、当创建复杂对象的算法,应该独立于该对象的组成部分和该对象的装配方式。
在建造者模式这一的设计模式种,第一个类builder是各种创建方法的抽象接口。ConcreteBuilder调用Builder的接口来装配。提供对外的接口。ProductA是A产品类,调用ConcreteBuilder实现了具体的产品A的实现方法,也就是需要被构造的那个复杂的对象。Director就是我们的向导类,根据客户的需求生成产品A、产品B、产品C。
场景:麦当劳,汉堡和批萨,收银员就是向导类。以PHP为代码环境。

<?php
//麦当劳,抽象接口类
interface McDonald{
    public function yuanLiao();
    public function nieXingZhuang();
    public function jiaRe();
}
//汉堡,就是产品A类
class Hamburger implements McDonald{
    public function yuanLiao(){
        echo '采购原料:面+肉+生菜+酱';
        $this->separate();
    }
    public function nieXingZhuang(){
        echo '捏成蓬松的圆球形状';
        $this->separate();
    }
    public function jiaRe(){
        echo '加热10分种';
        $this->separate();
    }
    private function separate(){
        echo '<br>';
    }
}
//薯条,就是产品B类
class FrenchFries implements McDonald{
    public function yuanLiao(){
        echo '采购原料:土豆';
        $this->separate();
    }
    public function nieXingZhuang(){
        echo '切成细长条';
        $this->separate();
    }
    public function jiaRe(){
        echo '加热15分种';
        $this->separate();
    }
    private function separate(){
        echo '<br>';
    }
}
//收银员,就是向导类
class Cashier{
    public function createProduct($productObj){
        $productObj->yuanLiao();
        $productObj->nieXingZhuang();
        $productObj->jiaRe();
        return '制作完成,可以上桌了';
    }
}
//客户端/接口
$cashier = new Cashier();
$cashier->createProduct(new Hamburger());
$cashier->createProduct(new FrenchFries());
?>

标签: PHP, 设计模式, 建造者模式

添加新评论