PHP-设计模式详解(建造者模式)

建造者模式(Builder)

介绍

创建型模式,使用多个简单的对象一步一步构建成一个复杂的对象。

何时使用:一些基本部件不会变,而其组合经常变化的时候。

建造者模式一般认为有四个角色:

A、产品角色,产品角色定义自身的组成属性

B、抽象建造者,抽象建造者定义了产品的创建过程以及如何返回一个产品

C、具体建造者,具体建造者实现了抽象建造者创建产品过程的方法,给产品的具体属性进行赋值定义

D、指挥者,指挥者负责与调用客户端交互,决定创建什么样的产品

优点:

A、建造者独立,易扩展。

B、便于控制细节风险。

缺点:

A、产品必须有共同点,范围有限制。

B、如内部变化复杂,会有很多的建造类。

代码实现:

<?php
// 产品角色
class User{
	protected $name = '';
	protected $age = '';
	protected $sex = '';

	public function setName($name){
		$this->name = $name;
	}

	public function setAge($age){
		$this->age = $age;
	}

	public function setSex($sex){
		$this->sex = $sex;
	}

	public function getUser(){
		echo '这个人姓名是:' . $this->name 
		. ',年龄是:' . $this->age
		. ',性别是:' . $this->sex .'。<br>';
	}
}

// 抽象建造者
interface UserBuilder{
	public function builderName();
	public function builderAge();
	public function builderSex(); 
	
	public function getUser();
}

// 具体建造者
class CommonBuilder implements UserBuilder{
	public $user;

	public function __construct(){
		$this->user = new User();
	}

	public function builderName(){
		$this->user->setName('普通用户');
	}

	public function builderAge(){
		$this->user->setAge('20');
	}

	public function builderSex(){
		$this->user->setSex('男');
	}

	public function getUser(){
		return $this->user;
	}
}

// 具体建造者
class SupperBuilder implements UserBuilder{
	public $user;

	public function __construct(){
		$this->user = new User();
	}

	public function builderName(){
		$this->user->setName('超级用户');
	}

	public function builderAge(){
		$this->user->setAge('30');
	}

	public function builderSex(){
		$this->user->setSex('女');
	}

	public function getUser(){
		return $this->user;
	}
}

// 指挥者
class UserDirector{
	public function make(UserBuilder $builder){
		$builder->builderName();
		$builder->builderAge();
		$builder->builderSex();
		return $builder->getUser();
	}
}

$director = new UserDirector();
$commonBuilder = new CommonBuilder();
$commonUser = $director->make($commonBuilder);
$commonUser->getUser();

$supperBuilder = new SupperBuilder();
$supperUser = $director->make($supperBuilder );
$supperUser->getUser();

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值