建造者模式的概念
建造者模式顾名思义就是建造者的意思,常用的场景例如:在开餐店点餐的时候,我们点不同的套餐,然后不同套餐的食物组合和价格以及打包的方式就是不同的。
建造者模式的实现
1、创建需要规范的建造抽象接口Builder
package builder;
/**
* Created by Walter on 2017/3/30.
*/
public interface Item {
public String name();
public Packing packing();
public float price();
}
package builder;
/**
* Created by Walter on 2017/3/30.
*/
public interface Packing {
public String pack();
}
package builder;
/**
* Created by Walter on 2017/3/30.
*/
public class Wrapper implements Packing{
@Override
public String pack() {
return "Wrapper";
}
}
package builder;
/**
* Created by Walter on 2017/3/30.
*/
public class Bottle implements Packing{
@Override
public String pack() {
return "Bottle";
}
}
package builder;
/**
* Created by Walter on 2017/3/30.
package builder;
/**
* Created by Walter on 2017/3/30.
*/
public class MealBuilder {
public Meal ChickenMeal(){
Meal meal = new Meal();
meal.addItem(new ChickenBurger());
meal.addItem(new Coffe());
return meal;
}
}
public abstract class Burger implements Item{ @Override public Packing packing() { return new Wrapper(); } @Override public abstract float price();}
2、根据不同的食物创建不同类型的具体产品ConceptBuilder
package builder;
/**
* Created by Walter on 2017/3/30.
*/
public class ChickenBurger extends Burger{
@Override
public String name() {
return "Chicken Burger";
}
@Override
public float price() {
return 10;
}
}
package builder;
/**
* Created by Walter on 2017/3/30.
*/
public abstract class ColdDrink implements Item{
@Override
public Packing packing() {
return new Bottle();
}
@Override
public abstract float price();
}
package builder;
/**
* Created by Walter on 2017/3/30.
*/
public class Coffe extends ColdDrink{
@Override
public String name() {
return "Coffe";
}
@Override
public float price() {
return 5;
}
}
3、创建者Director
package builder;
/**
* Created by Walter on 2017/3/30.
*/
public class MealBuilder {
public Meal ChickenMeal(){
Meal meal = new Meal();
meal.addItem(new ChickenBurger());
meal.addItem(new Coffe());
return meal;
}
}
4、产品Product
package builder;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Walter on 2017/3/30.
*/
public class Meal {
private List<Item> items = new ArrayList<Item>();
public void addItem(Item item){
items.add(item);
}
public float getCost(){
float cost = 0;
for(Item item:items){
cost += item.price();
}
return cost;
}
public void showItems(){
for(Item item:items){
System.out.println(item.name()+"["+item.packing().pack()+"]:¥"+item.price());
}
}
}
5、创建产品
package builder;
/**
* Created by Walter on 2017/3/30.
*/
public class BuilderPatternDemo {
public static void main(String[] args){
MealBuilder mealBuilder = new MealBuilder();
Meal meal = mealBuilder.ChickenMeal();
meal.showItems();
}
}