建造者模式

建造者模式,先来看下定义:是将一个复杂的对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

简单地说,需要创建的对象都有自己的功能,但是创建方式是一样的,那么可以用建造者类来负责功能对象的创建。

类图如下:


Builder模式中主要角色

  • 抽象建造者(Builder)角色:定义抽象接口,规范产品各个部分的建造,必须包括建造方法和返回方法。
  • 具体建造者(Concrete)角色:实现抽象建造者接口。应用程序最终根据此角色中实现的业务逻辑创造产品。
  • 导演者(Director)角色:调用具体的建造者角色创造产品。
  • 产品(Product)角色:在导演者的指导下所创建的复杂对象。

ConcreteBuilder类负责创建产品类对象,而Director类则负责产品类具体功能构建。如果需要修改产品的功能,只需要在ConcreteBuilder类实现新方法,并由Director类调用即可。对客户端来说是透明的,不需要关心。


比如,现在大家去买安卓手机,主要关心软件和硬件,比较商家的操作系统和硬件设备。

<?php
interface phone {
	public function buildSoftware();
	public function buildHardware();
}

class createPhone implements phone {
	private $_phone;
	public function __construct() {
		$this->_phone = new Zuk();
	}

	public function buildSoftware() {
		$this->_phone->setSoftware('安卓系统');
	}

	public function buildHardware() {
		$this->_phone->setHardware('四核8G内存');
	}

	public function getResult() {
		return $this->_phone;
	}
}
//我用的手机是ZukZ2
class Zuk {
	private $_software;
	private $_hardware;

	public function setSoftware($software) {
		$this->_software = $software;
	}

	public function setHardware($hardware) {
		$this->_hardware = $hardware;
	}

	public function getSoftware() {
		return $this->_software;
	}

	public function getHardware() {
		return $this->_hardware;
	}
}

class Director {
	public function __construct(CreatePhone $createphone) {
		$createphone->buildSoftware();
		$createphone->buildHardware();
	}
}

//client
$createPhone = new CreatePhone();
new Director($createPhone);
$myphone = $createPhone->getResult();
echo $myphone->getSoftware();
echo $myphone->getHardware();

最后总结:

优点:建造者模式将一个对象的实现与其“业务”逻辑分离开来,便于功能修改和扩展。

缺点:建造者接口修改后,所有执行类也需要进行修改。


  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值