<?php
/**
* 建造者模式
* -------------
* 定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
* 类型:创建类模式
* 四个要素:
* 1:产品类:一般是一个较为复杂的对象
* 2:抽象建造者:提取出复杂产品类的构造。一般至少会有两个抽象方法,一个用来建造产品,一个是用来返回产品。
* 3:建造者:实现抽象类的所有未实现的方法,具体来说一般是两项任务:组建产品;返回组建好的产品。
* 4:导演类:负责调用适当的建造者来组建产品
*/ //复杂产品类
class Car{
private $name;
private $type;
private $price;
private $color; public function setName($name){
$this->name = $name;
} public function setType($type){
$this->type = $type;
} public function setPrice($price){
$this->price = $price;
}
public function setColor($color){
$this->color = $color;
} public function show(){
echo $this->name.': '.$this->type.' '.$this->color.' '.$this->price;
echo "<br/>";
}
} //抽象其创建过程,可用于不同对象创建
interface Bulider{
public function createType($type);
public function createName($name);
public function createColor($color);
public function createPrice($price); public function createCar();
} class ConcreteBulider implements Bulider{//包含一个复杂对象
public $car; public function __construct(){
$this->car = new Car();
}
public function createType($type){
$this->car->setType($type);
} public function createColor($color){
$this->car->setColor($color);
} public function createName($name){
$this->car->setName($name);
} public function createPrice($price){
$this->car->setPrice($price);
} public function createCar(){
return $this->car;
}
} //封装易变的部分,比如顺序、属性
class Derictor{
public function __construct(ConcreteBulider $bulider){
$bulider->createColor('红色');
$bulider->createName('宝马');
$bulider->createPrice('150万');
$bulider->createType('SUV');
}
} class Client{
public static function main(){
//创建一个建造者,导演类利用其创建对象
$bulider = new ConcreteBulider();
$derictor = new Derictor($bulider);
$car = $bulider->createCar();
$car->show();
}
} Client::main();
?>

  UML类图如下:

建造者模式 是创建型模式,用于创建比产品族 还复杂的对象。首先 前提是有一个复杂对象,抽象出复杂对象的创建过程,用于创建其他对象。

写法:建造者包含一个 复杂对象,利用复杂对象的构件过程。。  导演类用于创建对象,包含一个建造者对象。

php 实现设计模式之 建造者模式的更多相关文章

  1. Java设计模式之建造者模式(Builder)

    前言: 最近一直在学习okHttp,也对其做了一些整理,okHttp和Retrofit结合大大加速我们的开发效率,源码里面采用了很多设计模式,今天我们来学习一下其中的设计模式之一建造者模式. 建造者模 ...

  2. C#设计模式(5)——建造者模式(Builder Pattern)

    一.引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成.例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象, ...

  3. 【GOF23设计模式】建造者模式

    来源:http://www.bjsxt.com/ 一.[GOF23设计模式]建造者模式详解类图关系 建造飞船 package com.test.Builder; public class AirShi ...

  4. C++设计模式之建造者模式(三)

    4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外.还能够通过Director类来更加精细地控制产品的创建过程.比如添加一类称之为钩子方法(HookMethod)的特殊方法来控制是 ...

  5. 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)

    原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...

  6. 折腾Java设计模式之建造者模式

    博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...

  7. C#设计模式之四建造者模式(Builder Pattern)【创建型】

    一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的,英文名称是Builder Pattern.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一 ...

  8. Java 设计模式之建造者模式(四)

    原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...

  9. GOF23设计模式之建造者模式

    GOF23设计模式之建造者模式 场景: 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样的一个问题需要处理: 装配这些子组件是不是有个步骤问题? 实际开发中,我们所 ...

  10. java设计模式3——建造者模式

    java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...

随机推荐

  1. Azure PowerShell (10) 使用PowerShell导出订阅下所有的Azure VM和Cloud Service的高可用情况

    <Windows Azure Platform 系列文章目录> 本文介绍的是国内由世纪互联运维的Azure China服务. 该脚本下载地址在http://files.cnblogs.co ...

  2. show master/slave status求根溯源

    show master/slave status分别是查看主数据库以及副数据库的状态,是一种能查看主从复制运行情况的方式. 这里仅仅讨论linux下的nysql5.7.13版本的执行情况 一.show ...

  3. 【ssh信任关系】解决信任关系不生效问题

    配置的时候遇见点问题,发现即便将id_rsa.pub拷贝到了另一台机器上,信任也没有建立起来. 原因是另外一台机器上目录权限不对,可以通过su root后观察/var/log/message里的日志信 ...

  4. SQL Server中的事务与锁

    了解事务和锁 事务:保持逻辑数据一致性与可恢复性,必不可少的利器. 锁:多用户访问同一数据库资源时,对访问的先后次序权限管理的一种机制,没有他事务或许将会一塌糊涂,不能保证数据的安全正确读写. 死锁: ...

  5. ExtJs4 基础必备

    认识ExtJs的开发包 下载路径:http://www.sencha.com/products/extjs/download/ 解压有20多兆,别怕,真正运行的没这么大.认识下这个包的文件结构吧. b ...

  6. .NET平台开源项目速览(4).NET文档生成工具ADB及使用

    很久以前就使用ADB这个工具来生成项目的帮助文档.功能强大,在学习一些开源项目的过程中,官方没有提供CHM帮助文档,所以为了快速的了解项目结构和注释.就生成文档来自己看,非常好用.这也是一个学习方法吧 ...

  7. ASP.NET MVC之视图生成URL(二)

    前言 上一节我们讲述了MVC中从控制器到视图传递数据的四种方式,想必大家早已掌握了,那我们继续往下走. 话题 在MVC的Web应用程序中,我们经常会出现这样的操作,从一个视图跳转到另外一个视图,大部分 ...

  8. 从零开始编写自己的C#框架(10)——项目实施计划与甘特图

    不知不觉本系列已经写了一个月,编码前的各项工作到此也终于结束了.回头看看这一个月走过来,白天上班晚上码字查资料,写写改改,挺不容易的.很多时候有些知识会用,知道是怎么回事,但并不等于能写出来.错别字. ...

  9. MySQL数据类型的验证

    CHAR char (M) M字符,长度是M*字符编码长度,M最大255. 验证如下: mysql)) default charset=utf8; ERROR (): ); use BLOB or T ...

  10. Kooboo CMS - 之后台注册用户流程方法。

    今天决定写一篇好一点的文章,吼吼!首先我们必须找到这个文件,这个文件是UsersController.cs,我们找到和添加新用户有关的方法,如下代码: public virtual ActionRes ...