建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
一个 Builder 类会一步一步构造最终的对象。该 Builder 类是独立于其他对象的。
注意:
优点:
缺点:
使用场景:
注意事项:与工厂模式的区别是:建造者模式更加关注与零件装配的顺序。
public class McDonaldMeal { private Bacon bacon; private Chicken chicken; private CoCoCoLe coco; public Bacon getBacon() { return bacon; } public void setBacon(Bacon bacon) { this.bacon = bacon; } public Chicken getChicken() { return chicken; } public void setChicken(Chicken chicken) { this.chicken = chicken; } public CoCoCoLe getCoco() { return coco; } public void setCoco(CoCoCoLe coco) { this.coco = coco; } @Override public String toString() { return "McDonaldMeal [bacon=" + bacon + ", chicken=" + chicken + ", coco=" + coco + "]"; } }
class Bacon{ private String name; public Bacon(String name) { this.name = name; } public String getName() { return name; } public void setName(String name) { this.name = name; } @Override public String toString() { return "Bacon [name=" + name + "]"; } } class Chicken{ private String name; private Integer count; public Chicken(String name, Integer count) { this.name = name; this.count = count; } public String getName() { return name; } public void setName(String name) { this.name = name; } public Integer getCount() { return count; } public void setCount(Integer count) { this.count = count; } @Override public String toString() { return "Chicken [name=" + name + ", count=" + count + "]"; } } class CoCoCoLe{ private String size; private String warm; public CoCoCoLe(String size, String warm) { super(); this.size = size; this.warm = warm; } public String getSize() { return size; } public void setSize(String size) { this.size = size; } public String getWarm() { return warm; } public void setWarm(String warm) { this.warm = warm; } @Override public String toString() { return "CoCoCoLe [size=" + size + ", warm=" + warm + "]"; } }
public interface MealBuilder { MealBuilder produceBacon(String name); MealBuilder produceChicken(String name,Integer count); MealBuilder produceCoCoCoLe(String size,String warm); McDonaldMeal build(); }
public class DiscountMealBuilder implements MealBuilder { McDonaldMeal meal = new McDonaldMeal(); @Override public MealBuilder produceBacon(String name) { Bacon bacon = new Bacon(name); meal.setBacon(bacon); return this; } @Override public MealBuilder produceChicken(String name, Integer count) { Chicken chicken = new Chicken(name, count); meal.setChicken(chicken); return this; } @Override public MealBuilder produceCoCoCoLe(String size, String warm) { CoCoCoLe coco = new CoCoCoLe(size, warm); meal.setCoco(coco); return this; } @Override public McDonaldMeal build() { return meal; } }
public class BuilderDemo01 { public static void main(String[] args) { MealBuilder builder = new DiscountMealBuilder(); McDonaldMeal meal = builder.produceBacon("A").produceChicken("A", 2).build(); System.out.println(meal.toString()); meal = builder.produceBacon("A").produceChicken("B", 5).produceCoCoCoLe("C", "A").build(); System.out.println(meal.toString()); } }
McDonaldMeal [bacon=Bacon [name=A], chicken=Chicken [name=A, count=2], coco=null] McDonaldMeal [bacon=Bacon [name=A], chicken=Chicken [name=B, count=5], coco=CoCoCoLe [size=C, warm=A]]
原文:https://www.cnblogs.com/vincentYw/p/12584317.html