大话设计模式第十三章---建造者模式

本文深入探讨了PHP中建造者模式的实现,解释了如何将复杂对象的构建与表示分离,使得构建过程更加灵活和易于管理。通过实例展示了Director、Builder和Concrete Builder的运用,以及如何创建不同类型的对象。
<?php
class Product {
    private $_parts = array();
    public function add(string $part) {
        $this->_parts[] = $part;
    }
    public function show() {
        echo "\n PRODUCT CREATEING...<br/>";
        foreach ($this->_parts as $part) {
            echo $part;
            echo "<br/>";
        }
    }
}

abstract class Builder {
    abstract function build_part_A();
    abstract function build_part_B();
    abstract function get_result(): Product;
}

class Concrete_builder_one extends Builder {
    private $_product = null;

    public function __construct() {
        $this->_product  = new Product();
    }
    public function build_part_A() {
        $this->_product->add('PART A');
    }
    public function build_part_B() {
        $this->_product->add('PART B');
    }
    public function get_result() : Product {
        return $this->_product;
    }
}


class Concrete_builder_two extends Builder {
    private $_product = null;

    public function __construct() {
        $this->_product  = new Product();
    }
    public function build_part_A() {
        $this->_product->add('PART X');
    }
    public function build_part_B() {
        $this->_product->add('PART Y');
    }
    public function get_result() : Product {
        return $this->_product;
    }
}

class Director {
    public function concrete(Builder $builder) {
        $builder->build_part_A();
        $builder->build_part_B();
    }
}

//CLIENT CODE
$director = new Director();
$b1 = new Concrete_builder_one();
$b2 = new Concrete_builder_two();

$director->concrete($b1);
$product1 = $b1->get_result();
$product1->show();

$director->concrete($b2);
$product2 = $b2->get_result();
$product2->show();

 

建造者模式:

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

  如果我们用了建造者模式,那么用户就只需要指定需要建造的类型就可以得到它们,而具体建造的过程和细节就不需要知道了。

  Director,指挥者,它是构建一个使用Builder接口的对象。在Director中完成部件的装配(即建造过程)!!

转载于:https://www.cnblogs.com/wy0314/p/4773279.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值