设计模式 一 创建者模式 Builder(生成器)

原创 2012年03月31日 15:43:19
<?php
/**
 * 设计模式 一 创建者模式 Builder(生成器)
 * 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,
 * 这个复杂对象的各个部分子对象经常面临着剧烈的变化,但是将它们组合在一起的算法绝对的稳定。
 * 如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?
 * 
 * 这就是要说的建造者模式。
 */

 /*
  * 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。
  */

  /**
   * 本节通过,现实生活中的买KFC例子,诠释建造者模式。
   * 客户端(client):客户。想去买套餐(这里包括汉堡、可乐、薯条),可以有1套餐(普通),和2套餐(黄金)两种套餐提供选择。
   * 指导员(director):收银员。知道顾客想要买什么样的套餐,并告诉餐馆员工去准备套餐。
   * 建造者(builder) :餐馆员工。按照收银员的要求去准备具体的套餐,分别放入汉堡、可乐、薯条等。规范产品各个组成成分的建造(即规范具体建造者的实现方法)
     其中所规范的方法中必须包含建造方法,和结果返回方法。
   * 产品角色(product):最后的套餐。所有的东西放在同一个盘子里面。
   */

/**
 * 
 */
class Food {
	private $hamb;
	private $coke;
	private $chip;

	public function setHamb($hamb) {
		$this->hamb = $hamb;
	}

	public function getHamb() {
		return $this->hamb;
	}

	public function setCoke($coke) {
		$this->coke = $coke;
	}

	public function getCoke() {
		return $this->coke;
	}

	public function setChip($chip) {
		$this->chip = $chip;
	}

	public function getChip() {
		return $this->chip;
	}
}

abstract class Builder {
	//添加汉堡
	public abstract function buildHamb();
	//添加可乐
	public abstract function buildCoke();
	//添加薯条
	public abstract function buildChip();
}

class NormalBuilder extends Builder {
	private $food;

	function __construct() {
		$this->food = new food();
	}

	public function buildHamb() {
		$this->food->setHamb(array('NormalHamb'=>"10.50"));
	}

	public function buildCoke() {
		$this->food->setCoke(array('CokeCole'=>"1.50"));
	}

	public function buildChip() {
		$this->food->setChip(array('FireChips'=>"7.5"));
	}

	public function getFood() {
		return $this->food;
	}
}

class GoldBuilder extends Builder {
	function __construct() {
		$this->food = new food();
	}
	public function buildHamb() {
		$this->food->setHamb(array('GoldHamb'=>"15.50"));
	}

	public function buildCoke() {
		$this->food->setCoke(array('CokeCole'=>"1.50"));
	}

	public function buildChip() {
		$this->food->setChip(array('FireChips'=>"7.5"));
	}


	public function getFood() {
		return $this->food;
	}
}

class FoodManager {
	public function construct(Builder $builder) {
		$builder->buildHamb();
		$builder->buildCoke();
		$builder->buildChip();
	}
}


$foodManager = new FoodManager();
$Builder = new GoldBuilder();
$foodManager->construct($Builder);
$product = $Builder->getFood();
var_export($product);
var_export($product->getHamb());
var_export($product->getCoke());
var_export($product->getChip());

/**
 * 总结
 * 建造者模式可以让一个产品的内部表象和产品的生产过程分离开,从而可以生成具有不同内部表象的产品。

 * 主要角色介绍
 * 抽象建造者(Builder)角色:定义一个抽象接口,规范产品各个组成成分的建造(即规范具体建造者的方法实现)。其中所规范的方法中必须包括建造方法和结果返回方法。
 * 具体建造者(ConcreteBuilder)角色:实现抽象建造者角色定义的方法。具体建造者与业务逻辑关联性比较大,应用程序最终会通过,调用此角色中的建造方法按照业务逻辑创建产品,在建造完成后通过结果返回产品实例。
 * 导演者(Diretor)角色:此角色的作用是调用具体的创建者角色创造产品。导演者与产品类没直接关系。
 * 产品(product)角色:在导演者指导下由具体建造者所创建的那个复杂的对象。
 导演者角色与客户端直接打交道,它理解客户端的业务逻辑,将客户端创建产品的请求拆分成部分请求,然后调用具体产品角色执行建造操作。它分离了客户端与具体建造者。
 */


 /**
  * 优点:
    1、建造者模式可以很好的将一个对象的实现与相关的“业务”逻辑分离开来,从而可以在不改变事件逻辑的前提下,是添加(或改变)实现变得非常容易。
    2、允许对象通过多个步骤来创建,并且可以改变过程(这和只有一个步骤的工厂模式不同)。
	3、向客户隐藏产品内部的表现。
	4、产品的实现可以被替换,因为客户只能看到一个抽象接口。
  * 缺点:建造者接口的修改会导致所有执行类的修改。
  */

  /**
   * 适用性
   * 1、需要生产的产品对象有复杂的内部结构。比如,汽车、电脑。
   * 2、需要生成的产品对象的属性互相依赖,建造者模式可以强迫生产顺序。
   */


/**
 * 和其他模式的区别
 * 1、抽象工厂模式:Builder模式返回完成的一个产品,而abstractFactory返回一系列有关系的产品。在抽象工厂模式中,客户采用abstractFactory生成自己要的
 对象,而在Builder模式中,客户端指导(diretor)builder类如何去生成对象。获知如何合成一些类来构成建造类,侧重于一步一步构造一个复杂对象,然后返回结果。
   2、原型模式:克隆,对象已经存在。
   3、工厂方法:强调的是对象的变化,类实例推迟到子类。
   4、单例:对象的唯一性。
 */



 建造者模式php实例



设计模式目录


设计模式-创建者模式(Builder)

  • 2008年08月19日 11:14
  • 73KB
  • 下载

设计模式之(三)创建者builder

一、概述 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳...
  • moiyer
  • moiyer
  • 2011年08月04日 11:07
  • 330

设计模式(五)创建者模式(Builder)

一、模式定义造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的...

设计模式(C++版)之(builder)创建者模式

建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式是一种对象创建型模式。       建造者模式一...

JAVA设计模式——创建者模式(builder)

定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 类型:创建类模式 类图: 四个要素 产品类:一般是一个较为复杂的对象,也就是说创建对象...

设计模式之 创建者(Builder)模式(C++实现)

这篇文章介绍设计模式中 "创建型模式"的第三种 —— 创建者(Builder)模式。 创建者模式将复杂对象的构造和表示相分离,同样的构建过程可以创建不同的表示。 其强调创建产品的过程是有步骤的,有...

c++ 设计模式之创建者(生成器)模式

http://blog.csdn.net/lbqbraveheart/article/details/7083417 个人感觉这个模式,使用的应该较少,主要应用于流程性的东西,创建者负责构建...

设计模式拾荒之创建者模式( Builder Pattern )

参考书籍: 《Design Patterns: Elements of Reusable Object-Oriented Software》 Builder 创建者模式GOF 书籍中最难以理解的一种模...

"围观"设计模式(9)--创建型之创建者模式(Builder Pattern)

生成器模式(英:Builder Pattern)是一种设计模式,又名:建造模式,是一种对象构建模式。它可以将复杂对象的建造过程抽象出来(抽象类别),使这个抽象过程的不同实现方法可以构造出不同表现(属性...

设计模式 (四)创建者模式(Builder)

创建者模式主要是为了所谓的高聚合,解耦合,遇到多种配件于一身的情况的时候,放在实体类里面不合适,放在工厂类也不合适,所以就添加了一个创建者类,专门对相应的零件进行组装,如同汽车了N中配件,同时要是各种...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:设计模式 一 创建者模式 Builder(生成器)
举报原因:
原因补充:

(最多只允许输入30个字)