面向对象的洗礼:设计模式(十三)之建造者模式
建造者模式,也叫生成器模式。是设计模式的一种。某个复杂算法类,在方法调用上是顺序稳定的,但是具体属性不同,此时可以使用建造者模式。
建造者模式:一个复杂的对象,我们把它的构造和它的表示分离,可以实现同样的构造,而产生多种不同的表示,这种设计模式我们把它叫做建造者模式,也被成为生成器模式。顾名思义,在一个厂房中批量生成。
在定义和开发时,必须要满足:1、我们开发的类,允许被它的对象有多种不同的表示。2、当创建复杂对象的算法,应该独立于该对象的组成部分和该对象的装配方式。
在建造者模式这一的设计模式种,第一个类builder是各种创建方法的抽象接口。ConcreteBuilder调用Builder的接口来装配。提供对外的接口。ProductA是A产品类,调用ConcreteBuilder实现了具体的产品A的实现方法,也就是需要被构造的那个复杂的对象。Director就是我们的向导类,根据客户的需求生成产品A、产品B、产品C。
场景:麦当劳,汉堡和批萨,收银员就是向导类。以PHP为代码环境。
<?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()); ?>