使用了建造者模式,用户只需要指定需建造的类型便可得到,无需知道具体的建造过程和细节
建造者模式UML类图:
例:麦当劳生产汉堡
产品类:(最终成型的汉堡)
class Product
{ LinkedList<String>list=new LinkedList<String>();
public void Add(String s) {
list.add(s);
}
public void print() {
for(String bujian:list) {
System.out.println(bujian);
}
}
}
抽象的建造者类:(生产任何种类的汉堡都必须的材料和步骤,如:面包片、酱料等)
abstract class Builder
{
public abstract void BuildPart1();
public abstract void BuildPart2();
public abstract Product getResult();
}
具体的建造者类1:(每种汉堡的具体放料的多少,如在酱料一方面是微辣的还是麻辣的,是每种汉堡的具体细节)
class Product1 extends Builder
{Product product=new Product();
public void BuildPart1() {
product.Add("A部件");
}
public void BuildPart2() {
product.Add("B部件");
}
public Product getResult() {
return product;
}
}
具体的建造者类2:(如上)
class Product2 extends Builder
{Product product=new Product();
public void BuildPart1() {
product.Add("X部件");
}
public void BuildPart2() {
product.Add("y部件");
}
public Product getResult() {
return product;
}
}
指挥者类:
class Director
{
public void CreatProduct(Builder builder)
{ builder.BuildPart1();
builder.BuildPart2();
}
}
什么时候用建造者模式呢?
主要用于创建一些复杂的对象(如汉堡),这些对象内部构建间的建造顺序通常是稳定的(都有面包片,都有肉饼,都有酱料等),但对象内部的构建面临着复杂的变化(用什么肉饼,酱料是麻辣还是微辣等具体细节)