Java开发中常用的设计形式(三)—建造者形式

一. 形式结构

  建造者情势重要包含多少个角色:

  Product:产品角色。

  Builder:抽象建造者。它评释为创设一个Product对象的逐一部件指定的虚幻接口。

  ConcreteBuilder:具体建造者。实现抽象接口,构建和装配各个部件。

  Director:指挥者。构建一个拔取Builder接口的目的。它最重假若用以创建一个犬牙交错的靶子,

    它根本有五个功效,一是:隔离了客户与对象的生育过程,二是:负责控制产品对象的生产过程。

 

二. 格局实现

    KFC里面一般都有好两种可供客户接纳的套餐,它可以依照客户所点的套餐,然后在末端做这个套餐,

  再次回到给客户的事一个完好的、美好的套餐。下边我们将会效仿这一个过程,大家约定套餐重要包含加拉加斯、薯条、

  可乐、鸡腿等等组成部分,使用不同的组成部分就足以构建出不同的套餐。

 

  1. Meal.java  套餐类,Product角色

Java 1Java 2

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;
    }
}

View Code

  2. MealBuilder.java  套餐构造器,Builder角色

Java 3Java 4

public abstract class MealBuilder {
    Meal meal = new Meal();

    public abstract void buildFood();

    public abstract void buildDrink();

    public Meal getMeal(){
        return meal;
    }
}

View Code

  3. 套餐A、套餐B  实现抽象套餐类,ConcreteBuilder角色

Java 5Java 6

public class MealA extends MealBuilder{

    public void buildDrink() {
        meal.setDrink("一杯可乐");
    }

    public void buildFood() {
        meal.setFood("一盒薯条");
    }

}


public class MealB extends MealBuilder{

    public void buildDrink() {
        meal.setDrink("一杯柠檬果汁");
    }

    public void buildFood() {
        meal.setFood("三个鸡翅");
    }

}

View Code

  4. KFC的服务生  它决定了套餐是的实现过程,然后给您一个宏观的套餐,Director角色

Java 7Java 8

public class KFCWaiter {
    private MealBuilder mealBuilder;

    public void setMealBuilder(MealBuilder mealBuilder) {
        this.mealBuilder = mealBuilder;
    }

    public Meal construct(){
        //准备食物
        mealBuilder.buildFood();
        //准备饮料
        mealBuilder.buildDrink();

        //准备完毕,返回一个完整的套餐给客户
        return mealBuilder.getMeal();
    }
}

View Code

  运行结果:套餐A的组成部分:一盒薯条—一杯可乐

Java, 

三. 测试 

Java 9Java 10

public class Client {
    public static void main(String[] args) {
        //服务员
        KFCWaiter waiter = new KFCWaiter();
        //套餐A
        MealA a = new MealA();
        //服务员准备套餐A
        waiter.setMealBuilder(a);
        //获得套餐
        Meal mealA = waiter.construct();

        System.out.print("套餐A的组成部分:");
        System.out.println(mealA.getFood()+"---"+mealA.getDrink());
    }
}

View Code

  

四. 格局总计  

  1.
建造者形式是将一个繁杂对象的成立进程给封装起来,客户只需要领会可以行使目标名或者
    类型就可知收获一个完好无损的目标实例,而不需要关注对象的切实创制进程。
  2.
建造者情势将目的的创办过程与对象自我隔离开了,使得细节看重于肤浅,符合依赖倒置原则。
    可以采取同一的创导进程来成立不同的产品对象。

 

相关文章