软件设计模式与体系结构 实验三 生成器模式

【实验内容和要求】

实例:KFC套餐

建造者模式可以用于描述KFC如何创建套餐:套餐是一个复杂对象,它一般包含主食(如汉堡、鸡肉卷等)和饮料(如果汁、可乐等)等组成部分,不同的套餐有不同的组成部分,而KFC的服务员可以根据顾客的要求,一步一步装配这些组成部分,构造一份完整的套餐,然后返回给顾客。利用建造者模式设计,用JAVA语言实现  (C#控制台应用程序实现)。绘制该模式的UML图。

一、实验目的:

1) 掌握建造者模式(Builder)的特点

2) 分析具体问题,使用建造者模式进行设计。

 

二、实验环境:

       Eclipse

 

 

三、实验内容:

模式UML

软件设计模式与体系结构 实验三 生成器模式_第1张图片

【模式代码(JAVA语言实现)】

public class Builder {



    public static void main(String[] args) {

        //套餐A

        MealBuilder mealBuilderA = new MealBuilderA();        //准备套餐A的服务员

        KFCWaiter waiter = new KFCWaiter(mealBuilderA);

        //获得套餐

        Meal mealA = waiter.construct();

        System.out.print("套餐A的组成部分:");

        System.out.println("食物:"+mealA.getFood()+";   "+"饮品:"+mealA.getDrink());



        //套餐B

        MealBuilder mealBuilderB = new MealBuilderB();        //准备套餐B的服务员

        waiter = new KFCWaiter(mealBuilderB);

        //获得套餐

        Meal mealB = waiter.construct();

        System.out.print("套餐B的组成部分:");

        System.out.println("食物:"+mealB.getFood()+";   "+"饮品:"+mealB.getDrink());

    }



}

/**

 * 具体的产品对象

 */

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;

    }



}

/**

 * 抽象建造者对象

 */

abstract class MealBuilder {

    Meal meal = new Meal();



    public abstract void buildFood();



    public abstract void buildDrink();



    public Meal getMeal(){

        return meal;

    }



}

/**

 * 套餐A的建造者

 */

class MealBuilderA extends MealBuilder {



    public void buildDrink() {

        meal.setDrink("可乐");

    }



    public void buildFood() {

        meal.setFood("汉堡");

    }



}

/**

 * 套餐B的建造者

 */

class MealBuilderB extends MealBuilder {



    public void buildDrink() {

        meal.setDrink("果汁");

    }



    public void buildFood() {

        meal.setFood("鸡肉卷");

    }



}

/**

 * Director(指导者)

 */

class KFCWaiter {



    private MealBuilder mealBuilder;



    public KFCWaiter(MealBuilder mealBuilder) {

        this.mealBuilder = mealBuilder;

    }



    public Meal construct(){

        //准备食物

        mealBuilder.buildFood();

        //准备饮料

        mealBuilder.buildDrink();

        //准备完毕,返回一个完整的套餐给客户

        return mealBuilder.getMeal();

    }



}

【运行截图】

 

四、心得体会:

通过本次实验,学会了使用建造者模式。建造者模式的适用性如下:

  1. 关注按照步骤创建一个复杂的对象
  2. 将所建造的产品最后一次性返回,而不是一点一点地返回

你可能感兴趣的:(软件设计模式与体系结构 实验三 生成器模式)