建造者模式 php,PHP设计模式之建造者模式定义与用法简单示例
本文实例讲述了PHP设计模式之建造者模式。分享给大家供大家参考,具体如下:
建造者模式:
将复杂对象的创建过程和表示进行分离(好吧,我也看不懂什么意思1)。
来点我人类能听懂的话:
1、在客户端看来需要的仅仅是实例化后的类对象(大多数情况下是需要类的属性)。
2、传统方式下当类有了之后,一般直接通过new class()的方式直接进行实例化,然后通过$obj->set1()构建属性1,$obj->set2()构建属性2,$obj->set3()构建属性3。。。
3、传统方式有一个很大的弊端:当我们的类发生改变后,我们需要大量的修改,比如文件1中加上$obj->set4(),文件2中加上$obj->set4(),增加很多的工作量。
4、建造者模式会给出构建对象的具体实现类,将对象的创建实例化过程封装在建造者类中,并给出一个返回构建后对象的方法,将构建后的对象返回。
5、当类发生改变后,只需要改变建造者类中构建对象的build()方法,对客户端来说,这并不可见,并且不用做修改就得到了修改后的对象。改动的只是需求对象修改后的逻辑处理。
代码:
/**
* 产品类Person
*/
class Person
{
public $_head;
public $_body;
public function setHead($head){
$this->_head=$head;
}
public function getHead(){
echo $this->_head;
}
public function setBody($body){
$this->_body=$body;
}
public function getBody(){
echo $this->_body;
}
}
/*
抽象建造者:
定义的一个抽象接口,用于对具体建造者类进行规范
*/
interface Builder{
public function buildHead();
public function buildBody();
public function getResult();
}
/*
具体建造者:
用于实现具体建造者类
*/
class ConcreteBuilder implements Builder{
public $person;
public $data;
public function __construct($data){
$this->person=new Person();
$this->data=$data;
}
public function buildHead(){
$this->person->setHead($this->data['head']);
}
public function buildBody(){
$this->person->setBody($this->data['body']);
}
public function getResult(){
return $this->person;
}
}
/*
导演者类:
用于调用具体建造者类创建产品类实例
*/
class Director{
public function __construct(ConcreteBuilder $builder){
$builder->buildHead();
$builder->buildBody();
}
}
/*
客户端:
根据需求进行逻辑处理
*/
$data=array(
'head'=>'大头儿子',
'body'=>'身体棒棒哒'
);
$builder=new ConcreteBuilder($data);
$director=new Director($builder);
$person=$builder->getResult();
echo $person->_head;
echo $person->_body;
运行结果:
大头儿子身体棒棒哒
希望本文所述对大家PHP程序设计有所帮助。
建造者模式 php,PHP设计模式之建造者模式定义与用法简单示例相关推荐
- 模式的模式:从设计模式到元模式
最近的一两个月里,我一直在研究各类的模式:设计模式.架构模式.容器模式,以及其它一些特定领域的模式(如并行计算模式)等等. 经历了一番买书.读论文.读代码,我发现了以前对于模式的理解不够深刻.也因此呢 ...
- android 状态模式,Android编程设计模式之状态模式详解
本文实例讲述了Android编程设计模式之状态模式.分享给大家供大家参考,具体如下: 一.介绍 状态模式中的行为是由状态来决定的,不同的状态下有不同的行为.状态模式和策略模式的结构几乎完全一样,但它们 ...
- 设计模式之外观模式php,PHP设计模式:外观模式
前言 菜鸟教程对外观模式的描述是:外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口.这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口, ...
- python文件合法模式组合_python设计模式之组合模式
最开始接触组合设计模式是在大话设计模式这本书中的案例,讲的是让你设计一个公司的组织架构,一个总公司下有人力资源部门,IT部门, 财务部门,还有广州分公司.深圳分公司,在分公司下也有IT部门和财务部门, ...
- 设计模式 原型模式_创新设计模式:原型模式
设计模式 原型模式 原型模式用于创建对象的副本. 这种模式非常有用,特别是当从头开始创建对象的成本很高时. 与builder , factory和abstract factory模式相比,它不会从头开 ...
- java并发编程:设计原则与模式_java编程设计模式一——策略模式
定义: 策略模式定义了算法族,分别封装起来,让它们之间相互替代.此模式让算法的变化独立于使用算法的客户. 问题描述: 建立一个鸭子Duck的父类,它有很多子类,Duck都会游泳,但是有鸭子会飞,有的鸭 ...
- 【Mediator模式】C++设计模式——中介者模式
中介者模式 一.设计流程探讨 二.模式介绍 三.代码实现 C++设计模式大全,23种设计模式合集详解-
- java 策略模式 促销_设计模式之策略模式
0x01.定义与类型 定义:定义了算法家族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化不会影响到使用算法的用户. 从一系列里抽象出不变的部分 策略模式是将可变的部分从程序中抽象分离成算法 ...
- php装饰器模式 简书,设计模式——装饰器模式
功能 无需改变原有对象的任何属性及其继承的情况下,动态为一个对象添加额外的职责. 实现 通过创建一个包装对象,也就是装饰来包裹真实的对象. 俺是一枚撸友,在这里借用LOL的余热,形象的将装饰器模式的实 ...
最新文章
- jquery 设置css样式
- HDOJ-3785 寻找大富翁(优先队列)
- 图集分配透明与不透明打包不到一起的错误
- 第三次握手为什么没有序列号_图解TCP三次握手与四次分手
- lin-cms-dotnetcore功能模块的设计
- 5120v2怎么配置web登陆_阿里企业邮箱如何配置和添加到第三个电子邮件客户端中?...
- 苹果平板怎么卸载软件_怎么很好的卸载流氓软件!
- Python 自定义模块
- 《软件工程导论》知识点期末复习整理
- pyhon下实现通过身份证获取归属地的方法
- IE首页被劫持,桌面图标异常的个人综合清理方法
- codesys工控机_CoDeSys
- 人工智能可以替代人类?今天要来说说人工智能与人类意识到底差距在哪里!...
- oracle新增字段时提示数据类型不正确
- 春节攻防战的战前谋划-电商必看
- DSA815频谱分析仪技术参数
- 微服务03 分布式搜索引擎 elasticsearch ELK kibana RestAPI 索引库 DSL查询 RestClient 黑马旅游
- Vue+Openlayer中测距测面和绘制点线面组件-LjMeasureDraw4326和LjMeasureDraw3857
- java环境变量user.home详解
- uniapp将聊天页面定位始终定位到最底部展示
热门文章
- 约瑟夫环(简单版)c语言解决
- [PyTorch] 深度学习框架PyTorch中的概念和函数
- matlab2c使用c++实现matlab函数系列教程-prod函数
- 串的复制——串传送指令MOVSB和方向标志位DF和CLD和REP
- Python3 练习笔记一
- Cesium基础使用介绍
- 解决百度 ueditor v1.4.3 编辑器上传图片失真的bug?
- 用ajax向处理页面传送路径问题解决方法
- 语音信号处理基础(五)——语音分帧与加窗
- [转载] 利用c/c++编写python模块