文档章节

建造者

小洋哥
 小洋哥
发布于 2015/09/29 14:45
字数 355
阅读 11
收藏 0
/**
 * @author  v.r  And  
 * 
 * @example
 * 建造者
 * 建造者设计模式定义了处理其他对象的复杂构建对象设计    
 * 列子:
 *  以商品为列子
 * 
 * @copyright copyright information
 * 
 */

$productCofigs = array(
	'type'=>'shirt',
	'size'=>'xl',
	'color'=>'red',
);

class Product
{
	
	protected $type = '';
	protected $size = '';
	protected $color = '';

	public function setType ($type) 
	{
		$this->type = $type;
	}

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

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

}

//创建商品对象

//$Product = new  Product();
//$Product->setType($productCofigs['type']);
//$product->setColor($productCofigs['color']);
//$product->setSize($productCofigs['size']);

/**
 * 以上是创建一商品对象时候的操作
 * 问题:
 *   创建对象时候分别调用每个方法是不是必要的合适的呢?
 *   如果不分别调用我们应该选取什么方式来做呢?
 *   建造模式是否能解决问题以上顾虑
 */

class ProductBuilder
{
	protected $product = NULL;
	protected $configs = array();

	public function __construct($configs)
	{
		$this->product = new  Product();
		$this->configs = $configs;
	}

	//构建
	public function build() 
	{
		$this->product->setSize($this->configs['size']);
		$this->product->setType($this->configs['type']);
		$this->product->setColor($this->configs['color']);
	}
    
    public function getProduct() 
    {
    	return $this->product;
    }
}

/**
* build() 方法隐藏product对象的实际方法调用
* 如果product类以后会发生改变,只是需要修改build()方法
*
*/

$builder =  new ProductBuilder($productCofigs);
$builder->build();
$product =  $builder->getProduct();
var_dump($product);

/**
 * 建造者模式最主的目的是消除其他对象的复杂创建过程,
 * 而且在某个对象进行构造和配置方法时可以尽可以能地减少重复更改代码
 */


© 著作权归作者所有

上一篇: 适配器
下一篇: 解释器模式
小洋哥
粉丝 23
博文 74
码字总数 39967
作品 0
成都
程序员
私信 提问
【设计模式】建造者模式 Builder Pattern

前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的...

风之源
2018/08/04
0
0
JS 设计模式 八(建造者模式)

建造者模式 将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示。主要解决在软件系统中,有时候面临着"一个复杂对象"的创建工作,由于需求的变化,这个复杂对象的某些部...

zchq88
09/29
0
0
我的Java设计模式-建造者模式

在未上大学之前,一直有个梦想“I have a dream!”,就是能成为一位汽车工程师,一直幻想着开着自己设计的汽车飞奔在公路上,迷倒了万千少女。咳咳~~虽然现在没实现我的dream,但梦想还是得有...

Jet啟思
2017/10/11
0
0
菜鸟成长系列-Builder 建造者模式

菜鸟成长系列-概述 菜鸟成长系列-面向对象的四大基础特性 菜鸟成长系列-多态、接口和抽象类 菜鸟成长系列-面向对象的6种设计原则 菜鸟成长系列-单例模式 菜鸟成长系列-工厂模式 什么是产品的...

2017/12/30
0
0
07、建造者模式--Builder

本节课程大纲 PS:转载请注明出处 作者: TigerChain 地址: http://www.jianshu.com/p/300cbb9ee7f2 本文出自 TigerChain 简书 人人都会设计模式 教程简介 1、阅读对象 本篇教程适合新手阅读,...

TigerChain
2017/12/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Qt编写自定义控件69-代码行数统计

一、前言 代码行数统计主要用来统计项目中的所有文件的代码行数,其中包括空行、注释行、代码行,可以指定过滤拓展名,比如只想统计.cpp的文件,也可以指定文件或者指定目录进行统计。写完这...

飞扬青云
20分钟前
3
0
驰骋工作流引擎-ccflow关于 “ 是否自动计算未来的处理人”的功能变更

关键字:流程未来节点处理人 工作流快速开发平台 工作流流设计 业务流程管理 asp.net 开源工作流 业务背景:一个流程在启动起来后,是可以对一些节点计算出来处理人是谁,流程的走向。对于另...

孟娟
36分钟前
5
0
IT兄弟连 HTML5教程 HTML5表单 HTML表单设计1

表单是PHP程序中最常使用的收集站点访问者信息的数据输入界面。通过表单浏览器获取用户的输入数据,并传送给Web服务器的脚本程序中,以各种不同的方式进行处理。在表单中提供了多种输入方式,...

老码农的一亩三分地
37分钟前
4
0
武者Vue

本文转载于:专业的前端网站➼武者Vue 1 - Introduction2 - The Vue Instance3 - Data & Methods4 - Data Binding5 - Events6 - Event Modifiers7 - Keyboard Events8 - Two-Way Data......

前端老手
43分钟前
6
0
uni app 零基础小白到项目实战

$emit 子组件传给父组件$ref 父组件操作子组件 公用模板 uni-app全局变量的几种实现方法 const websiteUrl = 'http'const now = Date.now || function() { return new Date().getTime......

达达前端小酒馆
53分钟前
7
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部