创建模式之建造者模式
起源:
建造者模式是系统中所使用的设计模式中较典型的一一个。我们知道,如何把问题分解为多个对象,除了取决于问题的本身,也受设计人员主观见解的影响。尽管如此,经验告诉我们,-些包含少数几个对象的设计模块,往往像建筑砖块那样,出现于 更大、更复杂的系统架构中,这些模块,称为“设计模式 ”。 设计模式出自建筑工程学家ChrisbpherA exander发展出的模式理论。它涵盖科学、心理、艺术和哲学,不仅适用于建筑工程学,而且适用于软件工程学以及任何其他的工程学。
建造者模式的意图是将-个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
适用于:
1)当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
2)当构造过程必须允许被构造的对象有不同的表示时。结构如下图所示。
3)建造者(BuiHer) 角色:给出一个抽象接口,以规范产品对象的各个组成成分的建造。- -般而言,此接口独立于应用程序的商业逻辑。模式中直接创建产品对象的是具体建造者ConceteBuider)角色。具体建造者类必须实现这个接口所要求的方法:-一个是建造方法,另-一个是结果返还方法。
4)具体建造者(Concre eBuilder)角色:担任这个角色的是与应用程序紧密相关的类,它们在应用程序调用下创建产品实例。这个角色主要完成的任务包括:实现建造者角色提供的接口,一步一步完成创建产品实例的过程。在建造过程完成后,提供产品的实例。
5)指导者(Director) 角色:担任这个角色的类调用具体建造者角色以创建产品对象。导演者并没有产品类的具体知识,真正拥有产品类的具体知识的是具体建造者对象。
6)产品(Product) 角色:产品便是建造中的复杂对象。指导者角色是与客户端打交道的角色。导演者角色将客户端创建产品的请求划分为对各个零件的建造请求,再将这些请求委派给具体建造者角色。具体建造者角色是做具体建造工作的,但却不为客户端所知。
实例
我们假设一个快餐店的商业案例,其中,一个典型的套餐可以是一个汉堡(Burger)和一杯冷饮(Cold drink)。汉堡(Burger)可以是素食汉堡(Veg Burger)或鸡肉汉堡(Chicken Burger),它们是包在纸盒中。冷饮(Cold drink)可以是可口可乐(coke)或百事可乐(pepsi),它们是装在瓶子中。
我们将创建一个表示食物条目(比如汉堡和冷饮)的 Item 接口和实现 Item 接口的实体类,以及一个表示食物包装的 Packing 接口和实现 Packing 接口的实体类,汉堡是包在纸盒中,冷饮是装在瓶子中。
然后我们创建一个 Meal 类,带有 Item 的 ArrayList 和一个通过结合 Item 来创建不同类型的 Meal 对象的 MealBuilder。BuilderPatternDemo,我们的演示类使用 MealBuilder 来创建一个 Meal。

创建一个表示食物条目接口

创建一个食物包装的接口

创建实现 Item 接口的抽象类,该类提供了默认的功能。


创建实现 Packing 接口的实体类。


创建扩展了 Burger 实体类和ColdDrink 的实体类。




创建一个 Meal 类,带有上面定义的 Item 对象

Buidertest使用 MealBuider 来演示建造者模式(Builder Pattern)。

结论:
使用建造者模式收到了以下效果:
(1)建造模式的使用使得产品的内部表象可以独立地变化。使用建造者模式可使客户端不必知道产品内部组成细节。
(2)--个建造者都相对独立,而与其它的建造者无关。
(3)模式所建造的最终产品更易于控制。 从这些方面来看,设计模式允许开发者管理问题域的复杂性和支持技术的复杂性。当开发者能够管理问题域的更多方面的时候,他们就能产生更具有灵活性和可维护性的软件。
视频链接:https://www.bilibili.com/video/BV1zK4y1C7PA/
浙公网安备 33010602011771号