摘抄《C#大话设计模式》
建造者模式(Bulider) : 讲一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式的结构图如下:
建造者模式的基本代码:
Product类——产品类,由多个部件组成。
package com.schema.builder;
import java.util.ArrayList;
import java.util.List;
public class Product {
private List<String> parts = new ArrayList<String>();
public void Add(String part){
parts.add(part);
}
public void Show(){
System.out.println("产品创建:------");
for(String part : parts){
System.out.println(part);
}
}
}
Builder类——抽象建造者类,确定产品由两个部件PartA和PartB组成,并声明一个得到产品建造后结果的方法GetResult。
package com.schema.builder;
public abstract class Builder {
public abstract void BuildPartA();
public abstract void BuildPartB();
public abstract Product GetResult();
}
ConcreteBuilder1和ConcreteBuilder2类
package com.schema.builder;
public class ConcreteBuilder1 extends Builder{
private Product product = new Product();
public void BuildPartA(){
product.Add("部件A");
}
public void BuildPartB(){
product.Add("部件B");
}
public Product GetResult(){
return product;
}
}
package com.schema.builder;
public class ConcreteBuilder2 extends Builder {
private Product product = new Product();
public void BuildPartA(){
product.Add("部件X");
}
public void BuildPartB(){
product.Add("部件Y");
}
public Product GetResult(){
return product;
}
}
package com.schema.builder;
public class Director {
public void Construct(Builder bulider){
bulider.BuildPartA();
bulider.BuildPartB();
}
public static void main(String[] args){
Director director = new Director();
Builder b1 = new ConcreteBuilder1();
Builder b2 = new ConcreteBuilder2();
director.Construct(b1);
director.Construct(b2);
Product p1 = b1.GetResult();
Product p2 = b2.GetResult();
p1.Show();
p2.Show();
}
}
建造者模式的好处就是使得建造代码与表示代码分离,由于建造者隐藏了该产品是如何组装的,所以若需改变一个产品的内部表示,只需再定义一个具体的建造者就可以了。