看第一遍书的时候,由于是走马观花的看了一遍,就总是将装饰模式和建造者模式混淆,然而,他们是有很大差别的。
建造者模式:将一个复杂的构建与表示分离,这样,相同的构建过程能创建出不同的表示。
就像一家饮品店的MM调制饮品一样,工序是相同的,只是配料略有不同,但是饮品的口味却千差万别,以此为例
建造者模式结构如下图
对应的代码
import java.util.ArrayList;
import java.util.List;
class Product{
List<String> parts = new ArrayList<String>();
public void Add(String part){
parts.add(part);
}
public void show(){
System.out.println("完成步骤分别是:"+parts);
}
}
abstract class Build{
public abstract void step1(String part1);
public abstract void step2(String part2);
public abstract void step3(String part3);
}
class Builder extends Build{
//在“制造”产品的时候,需要“知道”一个产品
Product product = new Product();
@Override
public void step1(String part1) {
// TODO Auto-generated method stub
product.Add(part1);
}
@Override
public void step2(String part2) {
product.Add(part2);
}
@Override
public void step3(String part3) {
// TODO Auto-generated method stub
product.Add(part3);
}
public void show(){
product.show();
}
}
/*
* 完成组建
*/
class Director{
public void result(Builder build,String step1,String step2,String step3){
build.step1(step1);
build.step2(step2);
build.step3(step3);
build.show();
}
}
public class Build_Director {
public static void main(String[] args) {
// TODO Auto-generated method stub
Director director = new Director();
Builder builder = new Builder();
Builder builder2 = new Builder();
System.out.println("小美的饮品:");
director.result(builder,"添加牛奶" ,"添加果酱","封口");
System.out.println("小丽的饮品:");
director.result(builder2,"添加布丁" ,"添加牛奶","封口");
}
}
运行结果如下
小美的饮品:
完成步骤分别是:[添加牛奶, 添加果酱, 封口]
小丽的饮品:
完成步骤分别是:[添加布丁, 添加牛奶, 封口]
当我们需要实现一系列步骤相同,细节不同的的业务时,建造者模式是很好的选择