设计模式之建造者模式(php实现)
github地址:https://github.com/ZQCard/design_pattern
/**
* 建造者模式
* 将一个复杂对象的建造与调用者分离。调用者只需要给出指定对象的类型和内容,建造者模式负责按照顺寻创建复杂对象.
* 以买汽车为例,工厂负责制造汽车,你可以购买你所需要的汽车品牌和型号
* 指挥者(Director):将复杂对象划分为各个详情对象的建造请求(厂长)
* 建造请求(Builder):将复杂对象划分为各个详情对象的建造请求(轮子、座椅、发动机)
* 具体的建造者:建造属于自己的产品部件(轮子制造人,座椅制造人,发动机制造人)
* 优点:易于解耦,将产品本身与创建的过程分离,可以使用相同的创建过程来创建不同的产品.
* 易于精确的控制对象,将复杂对象的创建划分在不同的方法中,创建过程更加清晰
* 易于扩展,增加新的建造者无需修改原来的类库
* 缺点:建造者模式的产品具有较多的共同点,组成部分类似。如果产品之间差异较大,则不适合
* 如果产品的内部变化复杂,需要定义更多具体的建造者来配合,导致系统变的庞大
*/
(1)Builer.class.php 建造抽象父类(用于规范子类方法)
<?php
namespace Builder; // 抽象接口 定义装配汽车的流水线
abstract class Builder
{
// 造轮子
public abstract function buildWheel(); // 造椅子
public abstract function buildChair(); // 造发动机
public abstract function buildEngine(); // 组装完成
public abstract function getCar();
}
(2)Director.class.php 指挥类(用于指挥具体建造者工作)
<?php namespace Builder; // 厂长安排工人装配
class Director
{
public function assemble(Builder $builder){
$builder->buildChair();
$builder->buildWheel();
$builder->buildEngine();
}
}
(3)Car.class.php (具体产品类)
<?php namespace Builder; class Car
{
private $buildList = []; public function add($part)
{
$this->buildList[] = $part;
} public function show(){
foreach ($this->buildList as $key => $builder){
echo "组件 " . $builder . " 安装好了".'<br/>';
}
print_r("组装完毕");
}
}
(4)ConcreteBuiler.class.php(具体建造者1号,用于建造普通汽车)
<?php namespace Builder; class ConcreteBuilder extends Builder
{ private $car; public function __construct()
{
$this->car = new Car();
} public function buildChair()
{
$this->car->add('装椅子');
} public function buildWheel()
{
$this->car->add('装轮子');
} public function buildEngine()
{
$this->car->add('装引擎');
} public function getCar()
{
return $this->car;
}
}
(5)ConcreteBuiler.class.php(具体建造者2号,用于建造好汽车)
<?php namespace Builder; class ConcreteBuilder2 extends Builder
{
private $car; public function __construct()
{
$this->car = new Car();
} public function buildWheel()
{
$this->car->add('造好轮子');
} public function buildChair()
{
$this->car->add("造好椅子");
} public function buildEngine()
{
$this->car->add("造好引擎");
} public function getCar()
{
return $this->car;
}
}
(6)builder.class.php(客户端)
<?php
/**
* 建造者模式
* 将一个复杂对象的建造与调用者分离。调用者只需要给出指定对象的类型和内容,建造者模式负责按照顺寻创建复杂对象.
* 以买汽车为例,工厂负责制造汽车,你可以购买你所需要的汽车品牌和型号
* 指挥者(Director):将复杂对象划分为各个详情对象的建造请求(厂长)
* 建造请求(Builder):将复杂对象划分为各个详情对象的建造请求(轮子、座椅、发动机)
* 具体的建造者:建造属于自己的产品部件(轮子制造人,座椅制造人,发动机制造人)
* 优点:易于解耦,将产品本身与创建的过程分离,可以使用相同的创建过程来创建不同的产品.
* 易于精确的控制对象,将复杂对象的创建划分在不同的方法中,创建过程更加清晰
* 易于扩展,增加新的建造者无需修改原来的类库
* 缺点:建造者模式的产品具有较多的共同点,组成部分类似。如果产品之间差异较大,则不适合
* 如果产品的内部变化复杂,需要定义更多具体的建造者来配合,导致系统变的庞大
*/ spl_autoload_register(function ($className){
$className = str_replace('\\','/',$className);
include $className.".class.php";
}); use Builder\Director;
use Builder\ConcreteBuilder;
use Builder\ConcreteBuilder2;
// 指挥者
$director = new Director();
// 具体建造者1
$builder = new ConcreteBuilder(); $director->assemble($builder); $car = $builder->getCar();
//var_dump($car); // 具体建造者2
$builder2 = new ConcreteBuilder2();
$director->assemble($builder2); $car2 = $builder2->getCar();
var_dump($car2);
设计模式之建造者模式(php实现)的更多相关文章
- Java设计模式之建造者模式(Builder)
前言: 最近一直在学习okHttp,也对其做了一些整理,okHttp和Retrofit结合大大加速我们的开发效率,源码里面采用了很多设计模式,今天我们来学习一下其中的设计模式之一建造者模式. 建造者模 ...
- C#设计模式(5)——建造者模式(Builder Pattern)
一.引言 在软件系统中,有时需要创建一个复杂对象,并且这个复杂对象由其各部分子对象通过一定的步骤组合而成.例如一个采购系统中,如果需要采购员去采购一批电脑时,在这个实际需求中,电脑就是一个复杂的对象, ...
- 【GOF23设计模式】建造者模式
来源:http://www.bjsxt.com/ 一.[GOF23设计模式]建造者模式详解类图关系 建造飞船 package com.test.Builder; public class AirShi ...
- C++设计模式之建造者模式(三)
4.引入钩子方法的建造者模式 建造者模式除了逐步构建一个复杂产品对象外.还能够通过Director类来更加精细地控制产品的创建过程.比如添加一类称之为钩子方法(HookMethod)的特殊方法来控制是 ...
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...
- 折腾Java设计模式之建造者模式
博文原址:折腾Java设计模式之建造者模式 建造者模式 Separate the construction of a complex object from its representation, a ...
- C#设计模式之四建造者模式(Builder Pattern)【创建型】
一.引言 今天我们要讲讲Builder模式,也就是建造者模式,当然也有叫生成器模式的,英文名称是Builder Pattern.在现实生活中,我们经常会遇到一些构成比较复杂的物品,比如:电脑,它就是一 ...
- Java 设计模式之建造者模式(四)
原文地址:Java 设计模式之建造者模式(四) 博客地址:http://www.extlight.com 一.前言 今天继续介绍 Java 设计模式中的创建型模式--建造者模式.上篇设计模式的主题为 ...
- GOF23设计模式之建造者模式
GOF23设计模式之建造者模式 场景: 我们要建造一个复杂的产品.比如:神州飞船,Iphone.这个复杂的产品的创建.有这样的一个问题需要处理: 装配这些子组件是不是有个步骤问题? 实际开发中,我们所 ...
- java设计模式3——建造者模式
java设计模式3--建造者模式 1.建造者模式介绍: 建造者模式属于创建型模式,他提供了一种创建对象得最佳方式 定义: 将一个复杂对象的构建和与它的表示分离,使得同样的构建过程可以创建不同的表示 主 ...
随机推荐
- web自动化测试:watir+minitest(四)
脚本连跑: rake是ruby中的一个构建工具,和make很像.允许用ruby来写rakefile. 我们使用rake以任务的方式来运行我们的脚本集. 新建Rakefile文件,写入如下内容: req ...
- 【bzoj4898】[Apio2017]商旅 Floyd+分数规划+Spfa
题目描述 有n个点.m条边.和k种商品.第$i$个点可以以$B_{ij}$的价格买入商品$j$,并以$S_{ij}$的价格卖出.任何时候只能持有一个商品.求一个环,使得初始不携带商品时以某种交易方式走 ...
- freebsd网卡驱动程序详解
freebsd网卡驱动程序详解 来源 https://blog.csdn.net/h_cszc/article/details/7776116 /* 注释:xie_minix */ /*此处为BSD申 ...
- axis2实践(一)JAX-WS入门示例
1. 实例说明 现在大多数的网站都有通知功能(例如,放假通知,网站维护通知等),本实例就是针对于通知,发布两个WebService服务 1)根据供应商编号,状态,发布日期查询通知信息 2)根据编号查询 ...
- JavaScript 代码性能优化总结
本文转自:http://mp.weixin.qq.com/s?__biz=MzAxODE2MjM1MA==&mid=400360237&idx=2&sn=eb00241cb3b ...
- 《R语言实战》读书笔记--第三章 图形初阶(一)
3.1使用图形 可以使用pdf等函数将图形直接保存在文件中.在运用attach和detach函数的使用中经常出现错误,比如命名重复的问题,所以,应该尽量避免使用这两个函数. plot是一般的画图函数, ...
- Installing Wine 1.5: configure: error: Cannot build a 32-bit program, you need to install 32-bit development libraries(转载)
Installing Wine 1.5: configure: error: Cannot build a 32-bit program, you need to install 32-bit dev ...
- SQL的主键和外键的作用
SQL的主键和外键约束 转载自:http://www.cnblogs.com/ywb-lv/archive/2012/03/12/2391860.html感谢原文作者的总结 SQL的主键和外键的作用: ...
- "todoList妙味"学习总结
1.v-bind 主要用于属性绑定 :class="{completed: item.isChecked}",它会将{}里面的内容解析为js表达式 2.vue提供了一组方法, ...
- 读入输出优化_C++
当我们考试时遇到大量的读入或者输出时,这些代码会耗费许多运行程序的时间,导致TL 本来 log2n 的算法因为读入被卡成线性的就太不划算了,所以我们这里要采用读入输出优化 getchar 和 putc ...