1.建造者模式概念
定义: 将一个复杂的对象构建与其表示相分离,使得同样的构建过程可以创建不同的表示;
核心 : 构建与表示分离,同构建不同表示
区别于 抽象工厂模式 :
(1)与抽象工厂模式 相似,因为它也可以创建复杂对象。主要的区别是建造者模式着重于 一步步构造一个复杂对象,关注的是零件类型和装配工艺的顺序 。而抽象工厂模式着重于多个系列的产品对象(简单的或是复杂的)。建造者模式在最后的一步返回产品,而对于抽象工厂来说,产品是立即返回的。
(2)在建造者模式里,有个指导者,由指导者来管理建造者,用户是与指导者联系的,指导者联系建造者最后得到产品。即建造模式可以强制实行一种分步骤进行的建造过程。
2.它的角色
(1)抽象建造者(Builder)角色:该角色 是用于规范产品的各个组成部分,并进行抽象,一般独立于应用程序的逻辑。
(2)具体建造者( ConcreteBuilder )角色:
该角色实 现出抽象建造者中定义的所有方法,并且返回一个组建好的产品实例。
(3)产品( Product )角色:
该角色是建造中的复杂对象,一个系统中会有多于一个的产品类,这些产品并不一定有公共的接口,完全可以是不相关联的。
(4)指导者(Director)角色:
该角色负责安排已有的模块的顺序,然后告诉建造者 Builder开始建造 。
3.实例
public interface Builder { void buildPartA(); void buildPartB(); void buildPartC(); }
public class BuilderImpl implements Builder { @Override public void buildPartA() { System.out.println("建造部件A"); } @Override public void buildPartB() { System.out.println("建造部件B"); } @Override public void buildPartC() { System.out.println("建造部件C"); } }
public class BuilderImpl2 implements Builder { @Override public void buildPartA() { System.out.println("建造部件AA"); } @Override public void buildPartB() { System.out.println("建造部件BB"); } @Override public void buildPartC() { System.out.println("建造部件CC"); } }
/** * 指挥者:指导 如何 建造 * 组合Builder */ public class Director { private Builder builder; public Director(Builder builder) { this.builder = builder; } /** * 建造方法:定义了建造的流程 * 如果需要其他流程来实现,再new一个指挥者Director就可 */ public void construct() { System.out.println("director 指挥 builder进行建造"); builder.buildPartA(); builder.buildPartB(); builder.buildPartC(); } }
public class Director2 { private Builder builder; public Director2(Builder builder) { this.builder = builder; } /** * 建造方法:定义了建造的流程 * 如果需要其他流程来实现,再new一个指挥者Director就可 */ public void construct() { System.out.println("director2 指挥 builder进行建造"); builder.buildPartB(); builder.buildPartC(); builder.buildPartA(); } }
public class Test { public static void main(String[] args) { Builder builder = new BuilderImpl(); Director director = new Director(builder); /* * 同样的构建过程,不同的模块(buildPartA、buildPartB、buildPartC)实现, new一个builder的实现 * 不同的构建过程,new 一个director * 不同的构建过程,不同的模块实现, new director,new builder */ director.construct(); System.out.println(""); Builder builder2 = new BuilderImpl2(); Director director2 = new Director(builder2); director2.construct(); System.out.println(""); Builder builder3 = new BuilderImpl2(); Director2 director3 = new Director2(builder3); director3.construct(); } }
打印:
director 指挥 builder进行建造 建造部件A 建造部件B 建造部件C director 指挥 builder进行建造 建造部件AA 建造部件BB 建造部件CC director2 指挥 builder进行建造 建造部件BB 建造部件CC 建造部件AA
4.优缺点
(1)优点:
A.可以让你改变产品的内部表示。
B.封装建筑和代表性的代码。
C.提供超过施工工艺的步骤的控制。
(2)缺点:
A.需要创造各种不同类型的产品单独ConcreteBuilder。
5.使用场景:
(1)当创建复杂对象的算法应该独立于该对象的组成部分以及它们的装配方式时。
(2)当构造过程必须允许被构造的对象有不同表示时( 相同的方法,不同的执行顺序,产生不同的结果时)。
本文向大家介绍iOS App设计模式开发中对建造者模式的运用实例,包括了iOS App设计模式开发中对建造者模式的运用实例的使用技巧和注意事项,需要的朋友参考一下 定义 "将一个复杂对象的构建与
介绍 在软件系统中,有时候面临着“一个复杂对象”的创建工作,其通常由各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将它们组合在一起的算法确相对稳定。如何应对这种变化?如何提供一种“封装机制”来隔离出“复杂对象的各个部分”的变化,从而保持系统中的“稳定构建算法”不随着需求改变而改变?这就是要说的建造者模式。 建造者模式可以将一个复杂对象的构建与其表
本文向大家介绍Java使用设计模式中的代理模式构建项目的实例展示,包括了Java使用设计模式中的代理模式构建项目的实例展示的使用技巧和注意事项,需要的朋友参考一下 概念 代理模式(Proxy):代理模式其实就是多一个代理类出来,替原对象进行一些操作。比如咱有的时候打官司需要请律师,因为律师在法律方面有专长,可以替咱进行操作表达咱的想法,这就是代理的意思。代理模式分为两类:1、静态代理(不使用jdk
本文向大家介绍Ruby设计模式编程中使用Builder建造者模式的实例,包括了Ruby设计模式编程中使用Builder建造者模式的实例的使用技巧和注意事项,需要的朋友参考一下 先来复习一下设计模式的基本概念: 定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 建造者隐藏了该产品是如何组装的,所以若需要改变一个产品的内部表示,只需要重新定一个建造者就可以了。 实用范围
本文向大家介绍Java设计模式之建造者模式(Builder模式)介绍,包括了Java设计模式之建造者模式(Builder模式)介绍的使用技巧和注意事项,需要的朋友参考一下 Builder模式定义:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。 Builder模式是一步一步创建一个复杂的对象,它允许用户可以只通过指定复杂对象的类型和内容就可以构建它们。用户不知道内部的具体
本文向大家介绍设计模式构建器模式/Java 实现,包括了设计模式构建器模式/Java 实现的使用技巧和注意事项,需要的朋友参考一下 示例 通过Builder模式,您可以以易于阅读的方式创建具有许多可选变量的类的实例。 考虑以下代码: 如果所有参数都是必需的,那么一切都很好。如果有更多的变量和/或其中一些是可选的怎么办?您不想使用必需参数和可选参数的每种可能的组合来创建大量的构造函数,因为它变得难以