php-建造者模式实现
发布于 2021-09-04 17:26 ,所属分类:软件编程学习资料
建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。建造者模式属于对象创建型模式。根据中文翻译的不同,建造者模式又可以称为生成器模式。
模式举例
现在有一个摩托车制造厂,它生产踏板摩托和跨骑摩托车,踏板车和跨骑车都是由发动机、车身和轮子组成的。我们这里踏板车和跨骑车的组装工作分配给两个工作人员/生产线处理。由组装部主管分配具体生产任务。这里我们就用到了建造者设计模式。
模式结构
以本文实例代码为参考
MotorcycleProduce-摩托组装抽象类:建立摩托组装标准工艺
MotorcycleScooterProduce-踏板摩托车组装者:负责踏板摩托车的组装工作
MotorcycleStraddleProduce:跨骑摩托组装者:负责跨骑摩托的组装工作
Director:主管类:负责摩托组装工作的具体分配和流程安排
MotocycleProduct:摩托车产品实体:最终形成产品并形成产品实体
图例
以本文实例代码为参考

代码实例
<?php//抽象类-定义生产摩托车流水线标准abstract class MotorcycleProduce{protected $motor;//发动机方法public abstract function addEngine();//车身方法public abstract function addBody();//车轮方法public abstract function addWhell();//获取摩托public abstract function getMotor();}/*** 踏板摩托组装*/class MotorcycleScooterProduce extends MotorcycleProduce{public function __construct(){$this->motor = new MotocycleProduct();}public function addEngine(){$this->motor->addEngine("踏板摩托-发动机已装好");}public function addBody(){$this->motor->addBody("踏板摩托-车身已装好");}public function addWhell(){$this->motor->addWhell("踏板摩托-车轮已装好");}public function getMotor(){return $this->motor;}}/*** 跨骑摩托组装*/class MotorcycleStraddleProduce extends MotorcycleProduce{public function __construct(){$this->motor = new MotocycleProduct();}public function addEngine(){$this->motor->addEngine("跨骑摩托-发动机已装好");}public function addBody(){$this->motor->addBody("跨骑摩托-车身已装好");}public function addWhell(){$this->motor->addWhell("跨骑摩托-车轮已装好");}public function getMotor(){return $this->motor;}}//安排生产线开始组装摩托class Director{public function assemble(MotorcycleProduce $motorcycleProduce){$motorcycleProduce->addEngine();$motorcycleProduce->addBody();$motorcycleProduce->addWhell();}}//摩托车产品本身class MotocycleProduct{private $motor = ["engine"=>"","body"=>"","whell"=>""];//新增发动机零部件public function addEngine($engine){$this->motor["engine"] = $engine;}public function addBody($body){$this->motor["body"] = $body;}public function addWhell($whell){$this->motor["whell"] = $whell;}//获取完整摩托对象public function getMotor(){return $this->motor;}}//分配任务管理者$director = new Director();//踏板摩托车$motorcycleScooterProduce = new MotorcycleScooterProduce;$director->assemble($motorcycleScooterProduce);$motorcycleScooter = $motorcycleScooterProduce->getMotor();var_dump($motorcycleScooter);echo "<br>";//跨骑摩托车$motorcycleStraddleProduce = new MotorcycleStraddleProduce;$director->assemble($motorcycleStraddleProduce);$motorcycleStraddle = $motorcycleStraddleProduce->getMotor();var_dump($motorcycleStraddle);
模式分析
抽象建造者类 MotorcycleProduce 定义了产品的创建方法和返回方法;
建造者模式还引入了一个任务指挥者Director,该类的作用主要是隔离了客户与组装过程,另外负责控制产品的组装流程工艺。指挥者依赖于抽象建造者类进行编程,调用者只需要知道具体创建者的归属,即可通过Director调用建造者相关的方法,从而返回一个完整的产品实例。
在客户端代码中,无须关心产品对象的具体组装过程,只需确定具体建造者的类型即可,建造者模式将复杂对象的构建与对象的表现分离开来,这样使得同样的构建过程可以创建出不同的表现。
优缺点
客户端无需知道产品内部实现细节,将产品的创建与本身解耦。使得相同的创建过程可以创建不同的产品对象
增加新的具体建造者类无需修改原有类库的代码,指挥者类针对抽象建造者类编程,系统扩展方便,符合“开闭原则”
创建者类相对独立,互不干扰,因此可以很方便的替换和新增具体建造者类。客户端可以通过不同的建造者类得到的不同的产品对象。
使得创建过程更加清晰,也更方便的控制产品的创建过程。
建造者模式缺点
建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,如果产品之间的差异性很大,则不适合使用建造者模式,因此其使用范围受到一定的限制。
如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。
适用环境
需要生成的产品对象有复杂的内部结构,这些产品对象通常包含多个成员属性。
需要生成的产品对象的属性相互依赖,需要指定其生成顺序。
对象的创建过程独立于创建该对象的类。在建造者模式中引入了指挥者类,将创建过程封装在指挥者类中,而不在建造者类中。
隔离复杂对象的创建和使用,并使得相同的创建过程可以创建不同的产品。
文章都看完了
不点个
分享吗
- The End -










![[php基础] 李炎恢第三季视频教程 php设计模式 smarty 商城实战 李炎恢php教程全套 共172课包含源码课件](https://static.kouhao8.com/sucaidashi/xkbb/816ba6334cc726e8420fb1ba5f124599.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)






![[网站优化] 使用PHP+Redis实现微博的用户管理视频教程](https://static.kouhao8.com/sucaidashi/xkbb/cd40585dc6146bf1848cbd115437f6ae.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)

![[网站优化] 使用PHP+Redis实现微博的用户管理视频教程](https://static.kouhao8.com/sucaidashi/xkbb/9faa5be8113c899a3a11e4410dc90a9d.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)




![[Android] 黑马 android 6.0编程者 开发者大会发布新特性 精华版](https://static.kouhao8.com/sucaidashi/xkbb/e81e6de8dbd24b280383bcbff47efa9d.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)


![JAVA] 设计模式 - 北风网精通23中设计模式](https://static.kouhao8.com/sucaidashi/xkbb/7fa0a1e5824bfe3ac6f1f4ef501e649e.jpg?x-oss-process=image/format,webp/resize,w_88/crop,w_88,h_88,g_nw)




相关资源