标签:
建造者模式的英文是:Separate the construction of a complex object from its representation so that the same construction process can create different representations.意思是:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式可以分为以下四个角色:
1. builder:给出一个抽象接口,规定产品对象的各个组成成分的建造。
2. ConcreteBuilder:实现Builder中所有的方法。 并返回建造好的实例。
3. Director:负责安排已有的模块顺序,然后通过Builder进行建造。
4. Product:要创建的复杂对象,一个系统中会有多个产品类,这些产品类,不一定有共同的接口,可以是完全不相关的。
建造者模式对应的类图:
各个类对应的代码如下:
导演者director
package com.zz.builder; /** * 导演者,起到组装的作用 * @author txxs * */ public class Director { private Builder builder = new ConcreteBuilder(); //构造产品,负责调用各个零件的构造方法 public Product builder(){ builder.setPart1(); builder.setPart2(); builder.setPart3(); //其他部分部件 return builder.builderProduct(); } }
package com.zz.builder; /** * 抽象建造者 * @author txxs * */ public abstract class Builder { //设置产品的不同部分,以获得不同的产品 public abstract void setPart1(); public abstract void setPart2(); public abstract void setPart3(); //……其他部件 //建造产品 public abstract Product builderProduct(); }
package com.zz.builder; /** * 具体建造者,实现继承的抽象方法 * @author txxs * */ public class ConcreteBuilder extends Builder { private Product product = new Product(); //设置产品零件 @Override public void setPart1() { //安装第一部分部件 } @Override public void setPart2() { //安装第二部分部件 } @Override public void setPart3() { //安装第三部分部件 } //……其他部件 //构建一个产品 @Override public Product builderProduct() { return product; } }
package com.zz.builder; /** * 产品类 * @author txxs * */ public class Product { //产品的业务处理方法 }
下面通过一个实例将建造者模式进行应用,这个例子是通过建造者模式模拟组装大众CC,在组装的过程中大众CC就是产品,暂且认为有经济型和豪华型,经济型和豪华型的发动机型号是不一样的,并且豪华型具有车载电视而经济型并没有。大众CC的建造厂就是Builder,而不同车型的组装车间分别实现Builder就是ConcreteBuilder,最后通过Director进行调度组装。源码下载。运行结果如图:
那么建造者模式在什么场景下使用
1、同样的方法,不同的执行顺序、产生不同的结果时。
2、多个部件或零件,组装到一个对象中去,但结果不同时。
3、产品类很复杂,或产品类中不同的方法调用顺序产生不同的效果时。
创建者模式和同为创建型模式的工厂方法的区别是,创建者模式关注的是零件的类型和装配的工艺。
哈哈,这在学习。
标签:
原文地址:http://blog.csdn.net/maoyeqiu/article/details/44935957