<?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. ASP.NET MVC 5 - 视图

    在本节中,你要去修改HelloWorldController类,使用视图模板文件,在干净利索地封装的过程中:客户端浏览器生成HTML. 您将创建一个视图模板文件,其中使用了ASP.NET MVC 3所 ...

  2. IIS ApplicationPoolIdentity

    原创地址:http://www.cnblogs.com/jfzhu/p/4067297.html 转载请注明出处 从IIS 7.5开始,Application Pool Identity的Built- ...

  3. Cookie与Session

    再说Cookie与Session之前,先要了解一下http协议. 何为http协议: http协议即超文本传输协议,一种基于浏览器请求与服务器响应的协议,该协议主要的特点就是它是一种无状态的协议(只针 ...

  4. Sql Server系列:流程控制语句

    T-SQL中用来编写流程控制模块的语句有:BEGIN...AND语句.IF...ELSE语句.CASE语句.WHILE语句.GOTO语句.BREAK语句.WAITFOR语句和RETURN语句. 1 B ...

  5. Overview of OpenCascade Library

    Overview of OpenCascade Library eryar@163.com 摘要Abstract:对OpenCascade库的功能及其实现做简要介绍. 关键字Key Words:Ope ...

  6. 【求助】WPF 在XP下 有的Textbox光标会消失

    最近做个项目,一直有一个问题没有解决,就是在XP下,有的Textbox里在文本框里没有东西的时候,会没有光标.不同的XP机器,失去光标的Textbox也不一样. 各位大师看下面的三张图,当Textbo ...

  7. datatable去重

    两种方法1 数据库直接去除重复select distinct * from 表名去除了重复行distinct 2 对 DataTable直接进行操作DataTable dt=db.GetDt(&quo ...

  8. 被嫌弃的eval和with

    × 目录 [1]eval [2]with 前面的话 eval和with经常被嫌弃,好像它们的存在就是错误.在CSS中,表格被嫌弃,在网页中只是用表格来展示数据,而不是做布局,都可能被斥为不规范,矫枉过 ...

  9. Android搜索框效果

    转载:http://blog.csdn.net/walker02/article/details/7917392 需求:项目中的有关搜索的地方,加上清空文字的功能,目的是为了增加用户体验,使用户删除文 ...

  10. 如何用Node编写命令行工具

    0. 命令行工具 当全局安装模块之后,我们可以在控制台下执行指定的命令来运行操作,如果npm一样.我把这样的模块称之为命令行工具模块(如理解有偏颇,欢迎指正) 1.用Node编写命令行工具 在Node ...