Java设计模式——创建型模式——建造者模式(Builder Pattern)
建造者模式,顾名思义的就是类似建房子,有一个固定的流程。在大话设计模式中,作者举了一个例子大概意思是同一道菜在中国的每一个地方都有不同的味道(LZ印象最深的是鱼香肉丝,来北方最之后印象最深的是宫保鸡丁。哈哈),而肯德基的鸡腿、汉堡在每一个城市都是一样的味道。我觉的这一个例子可以清楚的认识到建造者模式有一个固定的建造过程。建造者模式实现了依赖倒转原则,抽象不应该依赖细节,细节应该依赖与抽象。建造者模式的定义是:将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。
建造者模式的角色定义,在建造者模式中存在以下4个角色:
1 builder:为创建一个产品对象的各个部件指定抽象接口。
2 ConcreteBuilder:实现Builder的接口以构造和装配该产品的各个部件,定义并明确它所创建的表示,并提供一个检索产品的接口。
3 Director:构造一个使用Builder接口的对象。
4 Product:表示被构造的复杂对象。ConcreteBuilder创建该产品的内部表示并定义它的装配过程,包含定义组成部件的类,包括将这些部件装配成最终产品的接口。
建造者模式UML图
从上图可以看出Builder是为创建一个Product对象的各个部件指定的抽象接口,Prodcut是具体的产品。Director是一个建造者,由它指挥使用BUilder。ConcreteBuilder是具体的建造,实现Builder接口的各个方法。
public class Computer { List<String> parts = new ArrayList<String>(); public void show(){ for(String s:parts){ System.out.println(s); } } }
public interface Builder { void build_CPU(); void build_mainboard(); void build_memory(); void build_DISK(); void build_power(); Computer getComputer(); }
public class ComputerBuilder implements Builder { private Computer computer = new Computer(); @Override public void build_CPU() { computer.parts.add("采用INTEL的CPU"); } @Override public void build_mainboard() { computer.parts.add("采用大型主版"); } @Override public void build_memory() { computer.parts.add("采用8G内存"); } @Override public void build_DISK() { computer.parts.add("采用1TB固态硬盘"); } @Override public void build_power() { computer.parts.add("采用XXX电源"); } @Override public Computer getComputer() { return computer; } }
public class Director { public void construct(Builder builder){ builder.build_CPU(); builder.build_mainboard(); builder.build_memory(); builder.build_DISK(); builder.build_power(); } }
public class test { public static void main(String[] args) { Builder builder = new ComputerBuilder(); Director director = new Director(); director.construct(builder); builder.getComputer().show(); } }