作用:用于创建对象
使用场景: 1、需要生成的对象具有复杂的内部结构。 2、需要生成的对象内部属性本身相互依赖。
和工厂模式的区别:建造者模式更加关注与零件装配的顺序。
虚拟使用场景:
套餐包括汉堡和可乐。汉堡和可乐分别属于不同的食物种类,也分别有不用的包装。汉堡有多种汉堡,可乐也分可口可乐和百事可乐
1 食物种类和包装类型接口:
/**
* 食物种类
*/
public interface Item {
public String name();
public Packing packing();
public float price();
}
/**
* 包装
*/
public interface Packing {
public String pack();
}
2 包装类型的实现类
public class Box implements Packing {
@Override
public String pack() {
return "box";
}
}
public class Paper implements Packing {
@Override
public String pack() {
return "paper";
}
}
3 实现种类接口的抽象类(确定包装类型)
public abstract class Burger implements Item {
@Override
public abstract String name();
@Override
public Packing packing() {
return new Box();
}
@Override
public abstract float price();
}
public abstract class Cook implements Item {
@Override
public abstract String name();
@Override
public Packing packing() {
return new Paper();
}
@Override
public abstract float price();
}
4 实体类
public class Hamburger extends Burger {
@Override
public String name() {
return "Hamburger";
}
@Override
public float price() {
return 10.1F;
}
}
public class Pepsi extends Cook {
@Override
public String name() {
return "pepsi";
}
@Override
public float price() {
return 3.0F;
}
}
5 由汉堡和可乐构成一份套餐
public class Meal {
private Burger burger;
private Cook cook;
public Meal(Burger burger, Cook cook) {
this.burger = burger;
this.cook = cook;
}
}