面向对象的洗礼:设计模式(十三)之建造者模式
建造者模式,也叫生成器模式。是设计模式的一种。某个复杂算法类,在方法调用上是顺序稳定的,但是具体属性不同,此时可以使用建造者模式。在建造者模式这一的设计模式种,第一个类builder是各种创建方法的抽象接口。ConcreteBuilder调用Builder的接口来装配。提供对外的接口。ProductA是A产品类,调用ConcreteBuilder实现了具体的产品A的实现方法,也就是需要被构造的那个复杂的对象。Director就是我们的向导类,根据客户的需求生成产品A、产品B、产品C。
建造者模式,也叫生成器模式。是设计模式的一种。某个复杂算法类,在方法调用上是顺序稳定的,但是具体属性不同,此时可以使用建造者模式。
建造者模式:一个复杂的对象,我们把它的构造和它的表示分离,可以实现同样的构造,而产生多种不同的表示,这种设计模式我们把它叫做建造者模式,也被成为生成器模式。顾名思义,在一个厂房中批量生成。
在定义和开发时,必须要满足:1、我们开发的类,允许被它的对象有多种不同的表示。2、当创建复杂对象的算法,应该独立于该对象的组成部分和该对象的装配方式。
在建造者模式这一的设计模式种,第一个类builder是各种创建方法的抽象接口。ConcreteBuilder调用Builder的接口来装配。提供对外的接口。ProductA是A产品类,调用ConcreteBuilder实现了具体的产品A的实现方法,也就是需要被构造的那个复杂的对象。Director就是我们的向导类,根据客户的需求生成产品A、产品B、产品C。
场景:麦当劳,汉堡和批萨,收银员就是向导类。以PHP为代码环境。
[code]
<?php
//麦当劳,抽象接口类
interface McDonald{
public function yuanLiao();
public function nieXingZhuang();
public function jiaRe();
}
//汉堡,就是产品A类
class Hamburger implements McDonald{
public function yuanLiao(){
echo '采购原料:面+肉+生菜+酱';
$this->separate();
}
public function nieXingZhuang(){
echo '捏成蓬松的圆球形状';
$this->separate();
}
public function jiaRe(){
echo '加热10分种';
$this->separate();
}
private function separate(){
echo '<br>';
}
}
//薯条,就是产品B类
class FrenchFries implements McDonald{
public function yuanLiao(){
echo '采购原料:土豆';
$this->separate();
}
public function nieXingZhuang(){
echo '切成细长条';
$this->separate();
}
public function jiaRe(){
echo '加热15分种';
$this->separate();
}
private function separate(){
echo '<br>';
}
}
//收银员,就是向导类
class Cashier{
public function createProduct($productObj){
$productObj->yuanLiao();
$productObj->nieXingZhuang();
$productObj->jiaRe();
return '制作完成,可以上桌了';
}
}
//客户端/接口
$cashier = new Cashier();
$cashier->createProduct(new Hamburger());
$cashier->createProduct(new FrenchFries());
?>
[/code]
点击:1782
点赞:10
点踩:10