原创作品,可以转载,但是请标注出处地址:http://www.cnblogs.com/V1haoge/p/6553374.html
构建者模式,又称建造者模式,将一部负责对象的构建分为许多小对象的构建,最后在整合构建的模式。
构建者模式一般用在构建流程或者组成部件固定的场合,将这些部件分开构建成为组件对象,再将这些组件对象整合成为目标对象。
最佳实例就是组装台式电脑的情况,我们可以分别购买主板、CPU、内存、硬盘等部件,然后将这些部件组装在一起就形成了一台完整的电脑。
参照如下类图可以比较明显了了解编码如何实现构建者模式:
成员分析:
Director:控制者类,这是控制整个组合过程,在这个类内部有个Construct()方法,这个方法的作用就是通过调用Builder内部的各个组件的生成方法来完成组装;
Builder:构建者接口,定义各部件生成的方法;
ConcreteBuilder:具体构建者类:实现Builder构建者接口,具体定义如何生成各个部件;依赖于Product成品类,其中还有获取成品组装结构的方法GetResult()方法;
Product:成品类
现在我们就以组装台式机为例来进行编码实现:
Builder:构建接口
1 public interface Builder { 2 void build_CPU(); 3 void build_mainboard(); 4 void build_memory(); 5 void build_DISK(); 6 void build_power(); 7 Computer getComputer(); 8 }
ComputerBuilder:电脑构建类
1 public class ComputerBuilder implements Builder { 2 private Computer computer = new Computer(); 3 @Override 4 public void build_CPU() { 5 computer.parts.add("采用INTEL的CPU"); 6 } 7 @Override 8 public void build_mainboard() { 9 computer.parts.add("采用大型主版"); 10 } 11 @Override 12 public void build_memory() { 13 computer.parts.add("采用8G内存"); 14 } 15 @Override 16 public void build_DISK() { 17 computer.parts.add("采用1TB固态硬盘"); 18 } 19 @Override 20 public void build_power() { 21 computer.parts.add("采用XXX电源"); 22 } 23 @Override 24 public Computer getComputer() { 25 return computer; 26 } 27 }
Director:组装类
1 public class Director { 2 public void construct(Builder builder){ 3 builder.build_CPU(); 4 builder.build_mainboard(); 5 builder.build_memory(); 6 builder.build_DISK(); 7 builder.build_power(); 8 } 9 }
Computer:成品类
1 import java.util.*; 2 3 public class Computer { 4 List<String> parts = new ArrayList<String>(); 5 public void show(){ 6 for(String s:parts){ 7 System.out.println(s); 8 } 9 } 10 }
Clienter:测试类
1 public class Clienter { 2 public static void main(String[] args) { 3 Builder builder = new ComputerBuilder(); 4 Director director = new Director(); 5 director.construct(builder); 6 builder.getComputer().show(); 7 } 8 }
执行结果:
采用INTEL的CPU
采用大型主版
采用8G内存
采用1TB固态硬盘
采用XXX电源
从上面的示例中也可以很清楚的看到各个类与接口之间的关系,通过示例和类图就能够轻松了解构建者模式的编码结构,但是这种模式使用的场合限制较多,需要固定部件组合,一旦部件要增删,就需要更改代码。