php实现建造者模式

设计模式-使用php实现建造者模式

【概要】
创建型模式
建造者模式可以让一个产品的内部表象和和产品的生产过程分离开,从而可以生成具有不同内部表象的产品。

【结构图】

【主要角色】
抽象建造者(Builder)角色:定义一个抽象接口,规范产品各个组成成分的建造(即规范具体建造者的方法实现)。其中所规范的方法中必须包括建造方法和结果返回方法
具体建造者(ConcreteBuilder)角色:实现抽象建造者角色所定义的方法。具体建造者与业务逻辑关联性较大,应用程序最终会通过调用此角色中所实现的建造方法按照业务逻辑创建产品,在建造完成后通过结果返回方法返回建造的产品实例。一般在外部由客户或一个抽象工厂创建。
导演者(Director)角色:此角色的作用是调用具体的建造者角色建造产品。导演者与产品类没有直接关系,与产品类交谈的是具体抽象角色。
产品(Product)角色:在指导者的指导下由建造者所创建的那个复杂的对象
导演者角色与客户端直接打交道,它理解客户端的业务逻辑,将客户端创建产品的请求拆分成对产品组成部分的请求,然后调用具体产品角色执行建造操作。它分离了客户端与具体建造者。
【优缺点】
Builder模式的优点: 建造者模式可以很好的将一个对象的实现与相关的“业务”逻辑分离开来,从而可以在不改变事件逻辑的前提下,使增加(或改变)实现变得非常容易。
Builder模式的缺点: 建造者接口的修改会导致所有执行类的修改。
【适用性】
1、 需要生成的产品对象有复杂的内部结构。
2、 需要生成的产品对象的属性相互依赖,建造者模式可以强迫生成顺序。
3、 在对象创建过程中会使用到系统中的一些其它对象,这些对象在产品对象的创建过程中不易得到。

【建造者模式php实例】

<?php
 /**
 * 建造者模式
 * -------------
 * @author 		zhaoxuejie <zxj198468@gmail.com>
 * @package 	design pattern 
 * @version 	v1.0 2011-12-14
 */

//product
class Person {
	private $head;
	private $body;
	private $foot;
	
	//头
	public function getHead(){
		return $this->head;
	}
	
	public function setHead($head){
		$this->head = $head;
	}
	
	//体
	public function getBody(){
		return $this->body;
	}
	
	public function setBody($body){
		$this->body = $body;
	}
	
	//脚
	public function getFoot(){
		return $this->foot;
	}
	
	public function setFoot($foot){
		$this->foot = $foot;
	}
}

//创建一个product对象的各个部件指定抽象接口
interface PersonBuilder {
	
	public function buildHead();
	public function buildBody();
	public function buildFoot();
	public function getResult();//产品返还方法
}

//实现接口
class ConcreteBuilder implements PersonBuilder {
	private $person;
	
	function __construct(){
		$this->person = new Person();	
	}
	
	function buildHead(){
		$this->person->setHead('建造头……');
	}
	
	function buildBody(){
		$this->person->setBody('建造身体……');
	}
	
	function buildFoot(){
		$this->person->setFoot('建造脚……');
	}
	
	function getResult(){
		return $this->person;
	}	
}

//指导者
class Director {
	
	public function __construct(ConcreteBuilder $builder){
		$builder->buildHead();
		$builder->buildBody();
		$builder->buildFoot();
	}
}

//客户端
class Client {
	
	public static function main(){
		$builder = new ConcreteBuilder();
		$director = new Director($builder);
		$person = $builder->getResult();
		echo $person->getHead();
		echo $person->getBody();
		echo $person->getFoot();
	}
}

Client::main();

?>


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
建造者模式(Builder Pattern)是一种创建型设计模式,其目的是将一个复杂对象的构造与它的表示分离,使得同样的构建过程可以创建不同的表示。在该模式中,建造者类负责创建一个复杂对象的各个部分,并将这些部分组装起来形成完整的对象。 在PHP中,我们可以通过以下代码实现建造者模式: 1. 创建建造者接口Builder,用于定义构造复杂对象的方法。 ``` interface Builder { public function buildPartA(); public function buildPartB(); public function buildPartC(); public function getResult(); } ``` 2. 创建具体建造者类ConcreteBuilder,实现Builder接口中定义的方法,用于构造一个具体对象。 ``` class ConcreteBuilder implements Builder { private $product; public function __construct() { $this->product = new Product(); } public function buildPartA() { $this->product->setPartA('Part A'); } public function buildPartB() { $this->product->setPartB('Part B'); } public function buildPartC() { $this->product->setPartC('Part C'); } public function getResult() { return $this->product; } } ``` 3. 创建产品类Product,用于表示复杂对象。 ``` class Product { private $partA; private $partB; private $partC; public function setPartA($partA) { $this->partA = $partA; } public function setPartB($partB) { $this->partB = $partB; } public function setPartC($partC) { $this->partC = $partC; } public function getParts() { return [$this->partA, $this->partB, $this->partC]; } } ``` 4. 创建指挥者类Director,用于控制建造过程。 ``` class Director { private $builder; public function setBuilder(Builder $builder) { $this->builder = $builder; } public function construct() { $this->builder->buildPartA(); $this->builder->buildPartB(); $this->builder->buildPartC(); } } ``` 5. 在客户端代码中,使用指挥者类Director来构造一个具体对象。 ``` $builder = new ConcreteBuilder(); $director = new Director(); $director->setBuilder($builder); $director->construct(); $product = $builder->getResult(); print_r($product->getParts()); ``` 输出结果: ``` Array ( [0] => Part A [1] => Part B [2] => Part C ) ``` 以上就是基于PHP实现建造者模式模型的示例代码。通过该模式,我们可以将一个复杂对象的构造过程与表示分离,从而使得代码更加灵活和易于维护。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值