建造者模式 php,螃蟹学PHP设计模式之建造者模式
2.建造者模式
螃蟹今天要学习建造者模式了,昨天的适配器记得还是很清楚的。对于建造者模式,螃蟹的理解是你有10部iphone手机要充电,假设充电器额定电压都是220v,但是外电压不稳定,可能是220v,也可能是240v,或是300v,这个时候怎么办,可行的方法是购置一个家用变压器,把充电器都连在变压器上,不需要直接连在外电网上,无论外电压如何变化,只需要操作变压器即可。这个比喻可能有些牵强,不过还是能够说明建造者模式的用途,就是原对象可能是可变的,包括接收的参数或是方法等,但是如果我们已经在程序中大量实例化了原对象,这后面就很不利于维护了,这个时候那就最好创建一个建造者对象来完成原对象的实例化,避免直接对原对象的操作,这样后续原对象改动时,只需要改变建造者对象类即可。
参考项目模块:会员系统
会员系统出现频率还是挺高的,之前也遇到过项目,会员原对象开始定义的比较简介,螃蟹也做的很快,后来可爱的客户说要添加属性,但是项目中到处都使用了原对象,改起来也是挺麻烦,那么如果使用建造者模式则可以比较方便的进行更改了。
原来的用户对象: User.class.php
class User{
private $username = null;
private $password = null;
/**
* @return the $username
*/
public function getUsername() {
return $this->username;
}
/**
* @return the $password
*/
public function getPassword() {
return $this->password;
}
/**
* @param NULL $username
*/
public function setUsername($username) {
$this->username = $username;
}
/**
* @param NULL $password
*/
public function setPassword($password) {
$this->password = $password;
}
}
?>
那直接实例化原对象进行操作螃蟹就不演示了,这里螃蟹创建一个中间类即建造者类来做实例化原对象的工作: UserBuilder.class.php
require(‘User.class.php‘);
class UserBuilder{
protected $_user = null;
protected $_datas = array();
function __construct($datas){
$this->_user = new User();
$this->_datas = $datas;
}
public function build(){
$this->_user->setUsername($this->_datas[‘username‘]);
$this->_user->setPassword($this->_datas[‘password‘]);
}
public function getUser(){
return $this->_user;
}
}
?>
然后再编写测试文件:TestBuilder.php
require(‘UserBuilder.class.php‘);
//模拟用户数据
$user = array(‘username‘=>‘螃蟹‘,‘password‘=>‘px123456‘);
//通过建造者类创建对象
$build = new UserBuilder($user);
$build->build();
//获取用户对象
$userobj = $build->getUser();
//打印用户对象
echo ‘Username: ‘.$userobj->getUsername();
echo ‘
Password: ‘.$userobj->getPassword();
?>
输出测试结果:
Username: 螃蟹
Password: px123456
螃蟹发现建造者模式和适配器模式还是有相似之处的,适配器模式是原对象不能改,但又需要新增或修改属性或方法,而建造者是原对象不确定,不能直接使用原对象,需要用建造者去build一下,这样两个设计模式大致梳理清楚了,今天就到这里了,螃蟹要做饭去了,快饿扁了。
原文:http://my.oschina.net/caroltc/blog/297586
建造者模式 php,螃蟹学PHP设计模式之建造者模式相关推荐
- 螃蟹学PHP设计模式之解释器模式
2019独角兽企业重金招聘Python工程师标准>>> 8.解释器模式 今天又迟到了一个小时,不过现在基本任务都做完了,螃蟹的效率还是挺高的.昨天一天跑各个工商局,发现大学生创业的扶 ...
- php 解释器模式,螃蟹学PHP设计模式之解释器模式
8.解释器模式 今天又迟到了一个小时,不过现在基本任务都做完了,螃蟹的效率还是挺高的.昨天一天跑各个工商局,发现大学生创业的扶持真是太少了,还是写代码比较顺心.越学到后面,就越需要理解和区别不同的设计 ...
- 迭代子模式 php,螃蟹学PHP设计模式之迭代器模式
9.迭代器模式 中午睡了一个半小时,现在可以上班了,趁着还没下班先把迭代器模式搞定.回顾上午学的解释器模式是比较简单易懂的,而下午的迭代器模式螃蟹也觉得是比较好理解的.就是循环输出对象集合时采用迭代器 ...
- SON_EXAM考试php,螃蟹学PHP设计模式之模板模式
16.模板模式 貌似可以把模板模式学习一下了.初次接触螃蟹还以为是之前的外观模式的马甲,实则不是这样的.这就好比一台机器,把机器的操作写到一个程序里,让程序来自动控制机器的作业.模板模式就是定义了一系 ...
- 每日学一个设计模式1——迭代器模式
引言 精通设计模式是从码农脱颖而出的条件之一.跟着<图解设计模式>这本书学习设计模式,从今天开始,一天总结一个设计模式. 迭代器模式(一个一个遍历) 用处 隐藏遍历集合的内部结构,遍历不同 ...
- python中代理模式分为几种_Python设计模式之代理模式实例详解
本文实例讲述了Python设计模式之代理模式.分享给大家供大家参考,具体如下: 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 #!/usr/bin/env py ...
- java策略模式详解_Java经典设计模式之策略模式原理与用法详解
本文实例讲述了Java经典设计模式之策略模式.分享给大家供大家参考,具体如下: 策略模式指:策略模式指将程序中可变部分抽象分离成一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式 ...
- java备忘录模式 类图,Android编程设计模式之备忘录模式详解
本文实例讲述了Android编程设计模式之备忘录模式.分享给大家供大家参考,具体如下: 一.介绍 备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态,这有点像我们平时 ...
- java实现责任链模式_我的Java设计模式-责任链模式
今天来说说程序员小猿和产品就关于需求发生的故事.前不久,小猿收到了产品的需求. 产品经理:小猿,为了迎合大众屌丝用户的口味,我们要放一张图,要露点的. 小猿:......露点?你大爷的,让身为正义与纯 ...
最新文章
- Win7 任务栏影藏、显示速度提升
- 【学习笔记】树形结构基础
- Inside Dynamics Axapta源代码赏析(五)
- 最短路[Dijkstra和堆优化的Dijkstra][Bellman-Ford和SPFA][Floyd最短路](更新中)
- scala学习手记26 - 重用函数值
- linux6.2 网络yum,配置RHEL6.2的YUM源
- leetcode116. 填充每个节点的下一个右侧节点指针(dfs)
- c# 溢出抛异常_Rust竟然没有异常处理?
- 进程调度 操作系统第二章知识点归纳总结
- 纯前端控件集 WijmoJS 2018V2发布,提供可视化设计器,在React、Vue和Angular中的更易用...
- C语言:将数组中的第一个数与最后一个数,第二个数与倒数第二个数依次完成镜像对调
- 数据增强在贝壳找房文本分类中的应用
- MySql查询某列是否包含汉字
- 36.软件安装:RPM,SRPM和YUM功能
- 小爱同学服务器维修,小爱同学TTS服务(2019年5月29日更新可用版本)
- 关于timer产生的pwm寄存器arr,ccr,psc分析
- Ubuntu下使用“Windows徽标键+R”打开终端
- MSP430单片机工程配置driverlib库
- 双视图特征点匹配———使用RANSAC法剔除误差点
- 四个免费,无法律风险的高质量国外图片网站推荐
热门文章
- 如\u751f\u4ea7\u8005\u5411\u79fb\u52a8\u63a8\u9001属性文件properties转换中文,使用python
- 【随笔】博客质量分计算,如何让自己的博客脱颖而出,也许文章能够给你答案
- SVN、Git和Perforce(P4D)的故事
- c语言异质链表,用c语言实现异质链表.pdf
- 《炬丰科技-半导体工艺》氮化硅对硅和二氧化硅的高选择性蚀刻
- 国家信息安全水平考试(NISP一级)考试题库6
- 报名|金融科技下半场如何掘金?数十位大咖邀您深度探讨
- Windows11如何打开ie浏览器
- Java语言十五讲——前言
- JAVA使用http包进行url接口调用以及返回值处理 HttpEntity ResponseEntity