<?php
/**
* 1.6 建造者模式
* 定义:
* 将一个复杂对象的构建与它的表示分离
* ,使得同样的构建过程可以创建不同的
* 表示。
* 此模式包含三种角色:
* 1. 抽象建造者角色
* 职责:
* 用于指定规则和流程
* 2. 具体建造者角色
* 职责:
* 具体的建造过程
* 3. 指挥者角色
* 职责:
* 用于指挥建造过程
* 4. 具体产品角色
*
* 优点:
* 1. 封装性
* 2. 建造者独立,容易扩展
* 3. 便于控制细节风险。
* 缺点:
* 使用场景:
* 1. 相同的方法,不同的执行顺序,产
* 生不同的事件时;
* 2. 多个部件或零件都可以装配到一个
* 对象中,但是产生的运行结果又不
* 相同时;
* 3. 产品类非常复杂,或者产品类中的
* 调用属性不同产生了不同的效能时
*
*
*
*
*
*/
/**
* 抽象建造者角色
*/
abstract class PersonBuilder{
abstract public function head();
abstract public function body();
abstract public function handLeft();
abstract public function handRight();
abstract public function legLeft();
abstract public function legRight();
}
/**
* 具体建造者角色
*/
//瘦人的具体构建
class ThinPerson extends PersonBuilder{
public function head(){
echo ‘瘦人的头部构建成功<br/>‘;
}
public function body(){
echo ‘瘦人的躯干构建成功<br/>‘;
}
public function handLeft(){
echo ‘瘦人的左手构建成功<br/>‘;
}
public function handRight(){
echo ‘瘦人的左手构建成功<br/>‘;
}
public function legLeft(){
echo ‘瘦人的左腿构建成功<br/>‘;
}
public function legRight(){
echo ‘瘦人的右腿构建成功<br/>‘;
}
}
/**
* 胖人的具体构建
*/
class FatPerson extends PersonBuilder{
public function head(){
echo ‘胖人的头部构建成功<br/>‘;
}
public function body(){
echo ‘胖人的躯干构建成功<br/>‘;
}
public function handLeft(){
echo ‘胖人的左手构建成功<br/>‘;
}
public function handRight(){
echo ‘胖人的右手构建成功<br/>‘;
}
public function legLeft(){
echo ‘胖人的左腿构建成功<br/>‘;
}
public function legRight(){
echo ‘胖人的右腿构建成功<br/>‘;
}
}
/**
* 指挥者角色
*/
class Director{
public function __construct(PersonBuilder $person){
$person->head();
$person->body();
$person->handLeft();
$person->handRight();
$person->legLeft();
$person->legRight();
}
}
//客户端
$thinPerson=new ThinPerson();
$fatPerson=new FatPerson();
$d1=new Director($thinPerson);
$d2=new Director($fatPerson);
?>本文出自 “一切皆有可能” 博客,请务必保留此出处http://noican.blog.51cto.com/4081966/1614773
原文:http://noican.blog.51cto.com/4081966/1614773