建造者模式

1 介绍


Builder模式是一种对象创建型模式。主要用来隐藏复合对象的创建过程,复合对象的创建抽象出来,通过子类继承或重载的方式,动态的创建复合对象。

** 建造者模式的几个角色**

  • Builder:抽象建造者 --- Product中各个复合对象的接口
  • ConcreateBuidler:具体建造者 --- 实现抽象接口并加以实现
  • Director:指挥者
  • Product:产品角色 --- 一个具体的产品对象

先举个例子来理解下几个角色的意思:
当我们去吃kfc时,我们需要先告诉服务员(Director)我们需要点什么套餐(ConcreateBuilder),然后厨房(Builder)再根据套餐去选择合适的单品(Product

2 实现


产品角色:Product.class

public class Meal {
    private String food;
    private String drink;
    
    public String getFood() {
        return food;
    }
    public void setFood(String food) {
        this.food = food;
    }
    public String getDrink() {
        return drink;
    }
    public void setDrink(String drink) {
        this.drink = drink;
    }
    @Override
    public String toString() {
        return "Meal [food=" + food + ", drink=" + drink + "]";
    }   
}

抽象建造者:Citchen.class


public interface Citchen {
    void makeFood();
    void makeDrink();
    Meal getMeal();
}

具体建造者:MealA.class/MealB.class

public class MealA implements Citchen{
    Meal meal = new Meal();
    @Override
    public void makeFood() {
        meal.setFood("套餐A--生产食物");
    }

    @Override
    public void makeDrink() {
        meal.setDrink("套餐A--生产饮料");
    }

    @Override
    public Meal getMeal() {
        return meal;
    }
    
}
public class MealB implements Citchen{
    Meal meal = new Meal();
    @Override
    public void makeFood() {
        meal.setFood("套餐B--生产食物");
    }

    @Override
    public void makeDrink() {
        meal.setDrink("套餐B--生产饮料");
    }

    @Override
    public Meal getMeal() {
        return meal;
    }
    
}

指挥者:Waiter.class

public class Waiter {
    private Citchen citchen;
    public Waiter (Citchen citchen) {
        this.citchen = citchen;
    }
    
    public Citchen getMeal(){
        citchen.makeFood();
        citchen.makeDrink();
        return citchen;
    }
}

测试:MainClass.class

public class MainClass {
    public static void main(String[] args) {
        
        Citchen meal = new MealA();
        Waiter waiter = new Waiter(meal);
        waiter.getMeal();
        Meal meal2 = meal.getMeal();
        System.out.println(meal2.toString());

    }
}
建造者模式_第1张图片
运行结果

3 优缺点


优点:

  • 将产品的创建过程与产品本身分离出来,可以根据相同的创建过程得到不同的产品。
  • 将复杂的产品创建过程进行分解,让整个创建过程增次化,这样可以让开发人员更加方便的进行操控。

缺点

  • 如果产品的的内部结构很复杂,可能会导致需要定义很多的具体建造者来实现这些变化,导致代码量过多。

上一篇:原型模式
下一篇:装饰模式

你可能感兴趣的:(建造者模式)