php构建型模式(Builder pattern)
练代码,增加了调用时的输出。
<?php
/*
The builder pattern separates the construction of a complex object from its
representation, making it possible for the same construction process to create
different representations. While some creational patterns construct a product
in one call, builder pattern does it step by step under the control of the director.
*/
class Car {
private $wheels;
private $color;
public function getWheels() {
echo 'Car_getWheels<br/>';
return $this->wheels;
}
public function setWheels($weels) {
echo 'Car_setWheels<br/>';
$this->wheels = $weels;
}
public function getColor() {
echo 'Car_getColor<br/>';
return $this->color;
}
public function setColor($color) {
echo 'Car_setColor<br/>';
$this->color = $color;
}
public function __toString() {
return 'Color: ' . $this->color . '. Wheels: ' . $this->wheels;
}
}
interface CarBuilderInterface {
public function setColor($color);
public function setWheels($wheels);
public function getResult();
}
class CarBuilder implements CarBuilderInterface {
private $car;
public function __construct() {
echo 'CarBuilder__construct<br/>';
$this->car = new Car();
}
public function setColor($color){
echo 'CarBuilder_setColor<br/>';
$this->car->setColor($color);
return $this;
}
public function setWheels($wheels){
echo 'CarBuilder_setWheels<br/>';
$this->car->setWheels($wheels);
return $this;
}
public function getResult(){
echo 'CarBuilder_getResult<br/>';
return $this->car;
}
}
class CarBuilderDirector {
private $builder;
public function __construct(CarBuilder $builder) {
echo 'CarBuilderDirector__construct<br/>';
$this->builder = $builder;
}
public function build() {
echo 'CarBuilderDirector__build<br/>';
$this->builder->setColor('Red');
$this->builder->setWheels(4);
return $this;
}
public function getCar() {
echo 'CarBuilderDirector__getCar<br/>';
return $this->builder->getResult();
}
}
$carBuilder = new CarBuilder();
$carBuilderDirector = new CarBuilderDirector($carBuilder);
$car = $carBuilderDirector->build()->getCar();
echo $car;
?>
输出
CarBuilder__construct CarBuilderDirector__construct CarBuilderDirector__build CarBuilder_setColor Car_setColor CarBuilder_setWheels Car_setWheels CarBuilderDirector__getCar CarBuilder_getResult Color: Red. Wheels: 4
php构建型模式(Builder pattern)的更多相关文章
- 构建者模式(Builder pattern)
构建者模式应用场景: 主要用来构建一些复杂对象,这里的复杂对象比如说:在建造大楼时,需要先打牢地基,搭建框架,然后自下向上地一层一层盖起来.通常,在建造这种复杂结构的物体时,很难一气呵成.我们需要首先 ...
- 【设计模式】建造者模式 Builder Pattern
前面学习了简单工厂模式,工厂方法模式以及抽象工厂模式,这些都是创建类的对象所使用的一些常用的方法和套路, 那么如果我们创建一个很复杂的对象可上面的三种方法都不太适合,那么“专业的事交给专业人去做”,2 ...
- 设计模式系列之建造者模式(Builder Pattern)——复杂对象的组装与创建
说明:设计模式系列文章是读刘伟所著<设计模式的艺术之道(软件开发人员内功修炼之道)>一书的阅读笔记.个人感觉这本书讲的不错,有兴趣推荐读一读.详细内容也可以看看此书作者的博客https:/ ...
- 乐在其中设计模式(C#) - 建造者模式(Builder Pattern)
原文:乐在其中设计模式(C#) - 建造者模式(Builder Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 建造者模式(Builder Pattern) 作者:webabc ...
- 建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 它可以将多个简单的对象一步一步构建成一个复杂的对象. 意图:将一个复杂的构建与其表示相分离,使得同样的构建过程可以创建不同的表示. 主要解决:主要解决在软 ...
- 二十四种设计模式:建造者模式(Builder Pattern)
建造者模式(Builder Pattern) 介绍将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示. 示例用同样的构建过程创建Sql和Xml的Insert()方法和Get()方 ...
- 【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解释建造者模式的概念,那些东西太虚了.设计模式这种东西是为了解决实际问题的,不能为了设计模式而设计模式, ...
- iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
转自:http://www.cnblogs.com/wengzilin/p/4365855.html 本文主要讨论一下iOS中的Builder Pattern.与网上很多版本不同,本文不去长篇大论地解 ...
- Net设计模式实例之建造者模式(Builder Pattern)
一.建造者模式简介(Brief Introduction) 建造者模式(Builder Pattern),将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示. 建造者模式的优点是 ...
随机推荐
- TCP、UDP和HTTP区别详解
http:是用于www浏览的一个协议.tcp:是机器之间建立连接用的到的一个协议. 1.TCP/IP是个协议组,可分为三个层次:网络层.传输层和应用层.在网络层有IP协议.ICMP协议.ARP协议.R ...
- 快速搭建Linux-0.11实验环境
搭这个实验环境主要是为了学习Linux-0.11的代码,那就需要修改代码再次编译来验证自己的想法.主要的实验环境来自实验楼,但是在那上面毕竟不方便,所以就以实验楼上的为基础在自己的虚拟机上搭建一个环境 ...
- Java通过poi读取excel中文件
maven依赖 <dependency> <groupId>org.apache.poi</groupId> <artifactId>poi</a ...
- Python学习教程(十)精选 TOP45 值得学习的Python项目
精选 TOP45 值得学习的Python项目 [导读]热门资源博客 Mybridge AI 比较了 18000 个关于 Python 的项目,并从中精选出 45 个最具竞争力的项目.我们进行了翻译,在 ...
- 扫描工具Nikto-安全牛课堂网络安全之Web渗透测试练习记录
web扫描工具大都支持两种模式:代理扫描和主动扫描 Nikto 扫描内容 扫描软件版本.存在安全隐患的文件.服务器配置漏洞.服务器配置漏洞.web应用安全隐患 常用命令 nikto -list-plu ...
- 更新Linux内核
说明:为了安装Docker,当前虚拟机不满足要求,版本如下: [root@localhost116 ~]# uname -r -.el6.x86_64 [root@localhost116 ~]# c ...
- .net core 2.0的认证和授权
在asp.net core中,微软提供了基于认证(Authentication)和授权(Authorization)的方式,来实现权限管理的,本篇博文,介绍基于固定角色的权限管理和自定义角色权限管理, ...
- MySQL“慢SQL”定位
MySQL"慢SQL"定位 数据库调优我个人觉得必须要明白两件事 1.定位问题(你得知道问题出在哪里,要不然从哪里调优呢) 2.解决问题(这个没有基本的方法来处理,因为不同的问题处 ...
- 备忘】HttpContextAccessor类
AspNetCore / src / Http / Http / src / HttpContextAccessor.cs // Copyright (c) .NET Foundation. All ...
- 详细的Hadoop的入门教程-完全分布模式Fully-Distributed Operation
1. 前面在伪分布模式下已经创建了一台机器,为了统一命名,hostname更名为hadoop01.然后再克隆2台机器:hadoop02. hadoop03:将第一台机器hadoop01上的伪分布停止, ...