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设计模式之建造者模式相关推荐

  1. 螃蟹学PHP设计模式之解释器模式

    2019独角兽企业重金招聘Python工程师标准>>> 8.解释器模式 今天又迟到了一个小时,不过现在基本任务都做完了,螃蟹的效率还是挺高的.昨天一天跑各个工商局,发现大学生创业的扶 ...

  2. php 解释器模式,螃蟹学PHP设计模式之解释器模式

    8.解释器模式 今天又迟到了一个小时,不过现在基本任务都做完了,螃蟹的效率还是挺高的.昨天一天跑各个工商局,发现大学生创业的扶持真是太少了,还是写代码比较顺心.越学到后面,就越需要理解和区别不同的设计 ...

  3. 迭代子模式 php,螃蟹学PHP设计模式之迭代器模式

    9.迭代器模式 中午睡了一个半小时,现在可以上班了,趁着还没下班先把迭代器模式搞定.回顾上午学的解释器模式是比较简单易懂的,而下午的迭代器模式螃蟹也觉得是比较好理解的.就是循环输出对象集合时采用迭代器 ...

  4. SON_EXAM考试php,螃蟹学PHP设计模式之模板模式

    16.模板模式 貌似可以把模板模式学习一下了.初次接触螃蟹还以为是之前的外观模式的马甲,实则不是这样的.这就好比一台机器,把机器的操作写到一个程序里,让程序来自动控制机器的作业.模板模式就是定义了一系 ...

  5. 每日学一个设计模式1——迭代器模式

    引言 精通设计模式是从码农脱颖而出的条件之一.跟着<图解设计模式>这本书学习设计模式,从今天开始,一天总结一个设计模式. 迭代器模式(一个一个遍历) 用处 隐藏遍历集合的内部结构,遍历不同 ...

  6. python中代理模式分为几种_Python设计模式之代理模式实例详解

    本文实例讲述了Python设计模式之代理模式.分享给大家供大家参考,具体如下: 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问 #!/usr/bin/env py ...

  7. java策略模式详解_Java经典设计模式之策略模式原理与用法详解

    本文实例讲述了Java经典设计模式之策略模式.分享给大家供大家参考,具体如下: 策略模式指:策略模式指将程序中可变部分抽象分离成一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换.策略模式 ...

  8. java备忘录模式 类图,Android编程设计模式之备忘录模式详解

    本文实例讲述了Android编程设计模式之备忘录模式.分享给大家供大家参考,具体如下: 一.介绍 备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态,这有点像我们平时 ...

  9. java实现责任链模式_我的Java设计模式-责任链模式

    今天来说说程序员小猿和产品就关于需求发生的故事.前不久,小猿收到了产品的需求. 产品经理:小猿,为了迎合大众屌丝用户的口味,我们要放一张图,要露点的. 小猿:......露点?你大爷的,让身为正义与纯 ...

最新文章

  1. Win7 任务栏影藏、显示速度提升
  2. 【学习笔记】树形结构基础
  3. Inside Dynamics Axapta源代码赏析(五)
  4. 最短路[Dijkstra和堆优化的Dijkstra][Bellman-Ford和SPFA][Floyd最短路](更新中)
  5. scala学习手记26 - 重用函数值
  6. linux6.2 网络yum,配置RHEL6.2的YUM源
  7. leetcode116. 填充每个节点的下一个右侧节点指针(dfs)
  8. c# 溢出抛异常_Rust竟然没有异常处理?
  9. 进程调度 操作系统第二章知识点归纳总结
  10. 纯前端控件集 WijmoJS 2018V2发布,提供可视化设计器,在React、Vue和Angular中的更易用...
  11. C语言:将数组中的第一个数与最后一个数,第二个数与倒数第二个数依次完成镜像对调
  12. 数据增强在贝壳找房文本分类中的应用
  13. MySql查询某列是否包含汉字
  14. 36.软件安装:RPM,SRPM和YUM功能
  15. 小爱同学服务器维修,小爱同学TTS服务(2019年5月29日更新可用版本)
  16. 关于timer产生的pwm寄存器arr,ccr,psc分析
  17. Ubuntu下使用“Windows徽标键+R”打开终端
  18. MSP430单片机工程配置driverlib库
  19. 双视图特征点匹配———使用RANSAC法剔除误差点
  20. 四个免费,无法律风险的高质量国外图片网站推荐

热门文章

  1. 如\u751f\u4ea7\u8005\u5411\u79fb\u52a8\u63a8\u9001属性文件properties转换中文,使用python
  2. 【随笔】博客质量分计算,如何让自己的博客脱颖而出,也许文章能够给你答案
  3. SVN、Git和Perforce(P4D)的故事
  4. c语言异质链表,用c语言实现异质链表.pdf
  5. 《炬丰科技-半导体工艺》氮化硅对硅和二氧化硅的高选择性蚀刻
  6. 国家信息安全水平考试(NISP一级)考试题库6
  7. 报名|金融科技下半场如何掘金?数十位大咖邀您深度探讨
  8. Windows11如何打开ie浏览器
  9. Java语言十五讲——前言
  10. JAVA使用http包进行url接口调用以及返回值处理 HttpEntity ResponseEntity