美文网首页我爱编程
php设计模式之建造者模式

php设计模式之建造者模式

作者: 小山人 | 来源:发表于2018-06-21 11:45 被阅读0次

建造者模式

建造者模式也成生成器模式,是将一个复杂对象的构造与他的表示分离,使同样的构建过程可以创建不同的表示
创建者模式一般认为有四个角色:
1 产品角色,产品角色定义自身的组成属性
2 抽象建造者,抽象建造者定义了产品的创建过程以及如何返回一个产品
3 具体建造者,具体建造者实现了抽象建造者创建过程的方法,给产品的具体属性进行赋值定义
4 指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品

例如,有不同的产品,产品的名字,颜色,大小不同呢,通过不同呢的具体建造者创建不同属性的产品

目录结构

|builder  #项目根目录
|--Think  #核心类库
|----builder.php  #抽象建造者类
|----director.php  #指挥者
|----Loder.php  #自动加载类
|----product.php  #产品角色
|----productA.php  #产品A建造者
|----productB.php  #产品B建造者
|--index.php #单一的入口文件

代码实践

产品角色,定义产品属性 Think/product.php

<?php
/**
 * 产品角色
 */
namespace Think;

class product{
    public $name;
    public $size;
    public $color;
}

抽象建造者类 Think/builder.php

<?php
/**
 * 抽象建造者类
 */
namespace Think;

abstract class builder{
    protected $_product;

    public function __construct(product $product) {
        $this->_product = $product;
    }

    abstract function setName();
    abstract function setSize();
    abstract function setColor();

    public function getProduct() {
        echo "产品名称:{$this->_product->name}\n";
        echo "产品尺寸:{$this->_product->size}\n";
        echo "产品颜色:{$this->_product->color}\n";
    }
}

产品A建造者 Think/productA.php

<?php
/**
 * 产品A建造者
 */
namespace Think;

class productA extends builder{
    public function setName() {
        $this->_product->name = 'A';
    }

    public function setSize() {
        $this->_product->size = '10';
    }

    public function setColor() {
        $this->_product->color = 'red';
    }
}

产品B建造者 Think/productB.php

<?php
/**
 * 产品B建造者
 */
namespace Think;

class productB extends builder{
    public function setName() {
        $this->_product->name = 'B';
    }

    public function setSize() {
        $this->_product->size = '12';
    }

    public function setColor() {
        $this->_product->color = 'blue';
    }
}

指挥者 Think/director.php

<?php
/**
 * 指挥者
 */
namespace Think;
class director{
    public function show(builder $builder) {
        $builder->setName();
        $builder->setSize();
        $builder->setColor();
    }
}

自动加载 Think/Loder.php

<?php
namespace Think;

class Loder{
    static function autoload($class){
        require BASEDIR . '/' .str_replace('\\','/',$class) . '.php';
    }
}

index.php入口文件

<?php
define('BASEDIR',__DIR__);
include BASEDIR . '/Think/Loder.php';
spl_autoload_register('\\Think\\Loder::autoload');

//实例化产品B
$productB = new \Think\productB(new \Think\product());
//实例化建造指挥者
$director = new \Think\director();
//指挥建造
$director->show($productB);
//得到产品B
$B = $productB->getProduct();

上一篇 php设计模式之装饰器模式
下一篇 php设计模式之原型模式

相关文章

  • Android中涉及的模式

    我的Java设计模式-建造者模式 我的Java设计模式-观察者模式 重学设计模式之单例模式

  • 设计模式之建造者模式

    设计模式之建造者模式 Intro 简介 建造者模式: 建造者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加...

  • PHP设计模式之观察者模式

    PHP设计模式之观察者模式

  • php设计模式之建造者模式

    建造者模式 建造者模式也成生成器模式,是将一个复杂对象的构造与他的表示分离,使同样的构建过程可以创建不同的表示创建...

  • 设计模式之建造者模式

    设计模式之建造者模式 1. 模式定义 建造者模式又可以成为生成器模式,它属于对象创建型模式。建造者模式将一个复杂对...

  • PHP完整实战23种设计模式

    前言 设计模式是面向对象的最佳实践 实战 PHP实战创建型模式 单例模式 工厂模式 抽象工厂模式 原型模式 建造者...

  • Javaの设计模式之建造者模式

    推荐阅读:《设计模式之禅》 今早早起,刚刚出炉,哈哈 BuilderPattern 设计模式之建造者模式 Demo...

  • PHP设计模式:建造者模式

    前言 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模...

  • PHP设计模式-建造者模式

    适用性 建造者设计模式定义了处理其他对象的复杂构建的对象设计 UML 代码示例 具体项目包含一个创建复杂产品对象的...

  • 设计模式之建造者模式

    设计模式之建造者模式 建造者模式 属于 创建型模式,提供一种创建对象的最佳方式。 创建型模式 指不是直接使用ne...

网友评论

    本文标题:php设计模式之建造者模式

    本文链接:https://www.haomeiwen.com/subject/steqyftx.html