PHP设计模式之Builder模式

    技术2022-05-20  41

    Builder模式让我想到一个词“外包”,他把对象的创建外包给一个客户类,并且这个“外包类”要一步一步地创建对象,但是他又不返回本身类的对象。当然,这只是个比方,不是很准确,其实Builder模式要解决的是这样的问题:当我们要创建的对象很复杂的时候(通常是由很多其他的对象组合而成),我们要要复杂对象的创建过程和这个对象的表示(展示)分离开来,这样做的好处就是通过一步步的进行复杂对象的构建,由于在每一步的构造过程中可以引入参数,使得经过相同的步骤创建最后得到的对象的展示不一样。值得一提的是这个模式体现了自动化特点,要一个对象去创建别的对象,我们一个机器帮助我们更好地去做好创建工作,因为只有机器才明白创建的细节,程序人员通常不知道我们new出来的对象的真正创建的细节,Builder模式典型结构图:

    下面的代码来自于一位大牛的blog: http://www.phppan.com/?s=设计模式

     

    <?php /** * 建造者模式 2010-05-23 sz * @author phppan.p#gmail.com * @package design pattern */ /** * 产品 * 此处仅以一个产品类中的字符串演示产品 */ class Product {                           /** * 产品的组成部分集合 */ private $_parts; public function __construct() { $this->_parts = array(); } public function add($part) { return array_push($this->_parts, $part); } public function show() { echo "the product include:"; array_map('printf', $this->_parts); } } /** * 抽象建造者 */ abstract class Builder { /** * 产品零件构造方法1 */ public abstract function buildPart1(); /** * 产品零件构造方法2 */ public abstract function buildPart2(); /** * 产品返还方法 */ public abstract function getResult(); } /** * 具体建造者 */ class ConcreteBuilder extends Builder { private $_product; public function __construct() { $this->_product = new Product(); } public function buildPart1() { $this->_product->add("Part1"); } public function buildPart2() { $this->_product->add("Part2"); } public function getResult() { return $this->_product; } } /** * 导演者 */ class Director { public function __construct(Builder $builder) { $builder->buildPart1(); $builder->buildPart2(); } } class Client { /** * Main program. */ public static function index() { $buidler = new ConcreteBuilder(); $director = new Director($buidler); $product = $buidler->getResult(); $product->show(); } } Client::index(); ?>


    最新回复(0)