建造者模式 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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值