建造者模式的应用

Posted majiasheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了建造者模式的应用相关的知识,希望对你有一定的参考价值。

一、实验目的:

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

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

二、实验环境:

Eclipse

三、实验内容:

(写出主要的内容)

实例:KFC套餐

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

模式UML

 技术图片

(1) Meal(套餐类)

public class Meal {

    private String pasta;

    private String drink;

    private String dishes;

    public void setPasta(String pasta){

        this.pasta = pasta;

    }

    public void setDrink(String drink){

        this.drink = drink;

    }

    public void setDishes(String dishes){

        this.dishes = dishes;

    }

    public String getPasta(){

        return(this.pasta);

    }

    public String getDrink(){

        return(this.drink);

    }

    public String getDishes(){

        return(this.dishes);

    }

 

}

(2)抽象建造者类MealBuilder(套餐建造者类)

public abstract class MealBuilder {

    Meal meal=new Meal();

    public abstract void buildPasta();

    public abstract void buildDrink();

    public abstract void buildDishes();

    public Meal getMeal() { //这道一个菜单,这个是返回

        return meal ;

    }

   

}

(3)具体建造者类SubMealBuilderA()(A套餐建造者类)

public class SubMealBuilderA extends MealBuilder {

        public void buildPasta()

        {

            meal.setPasta("一份面条");

        }

        public void buildDrink()

        {

            meal.setDrink("一瓶橙汁");

        }

        public void buildDishes()

        {

            meal.setDishes("一份番茄炒鸡蛋");

        }

}

(4) 具体建造者类SubMealBuilderB()(B套餐建造者类)

public class SubMealBuilderB extends MealBuilder {

        public void buildPasta()

        {

            meal.setPasta("一份米饭");

        }

        public void buildDrink()

        {

            meal.setDrink("一瓶雪碧");

        }

        public void buildDishes()

        {

            meal.setDishes("一份芹菜炒肉");

        }

(5)指挥者类Waiter(服务员类)

public class Waiter {

    private MealBuilder mb;

    public void setMealBuilder(MealBuilder mb)//调用这是从那里调用而来,当然是等待服务了

    {

        this.mb = mb;

    }

    public Meal construct()

    {

        mb.buildPasta();

        mb.buildDrink();

        mb.buildDishes();

        return mb.getMeal();

    }

}

(6)客户端测试类Client

public class Waiter {

    private MealBuilder mb;

    public void setMealBuilder(MealBuilder mb)//调用这是从那里调用而来,当然是等待服务了

    {

        this.mb = mb;

    }

    public Meal construct()

    {

        mb.buildPasta();

        mb.buildDrink();

        mb.buildDishes();

        return mb.getMeal();

    }

}

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

【运行截图】

具体建造者类SubMealBuilderA()(A套餐建造者类)

技术图片

具体建造者类SubMealBuilderB()(B套餐建造者类)

技术图片

四、心得体会:

通过这次实验,让我学会掌握建造者模式(Builder)的特点,分析具体问题,使用建造者模式进行设计。也称生成器模式,生成器模式将所建造的产品(通常是一个复合体)最后一次性返回。

以上是关于建造者模式的应用的主要内容,如果未能解决你的问题,请参考以下文章

设计模式·建造者模式

五建造者模式--创建型模式

设计模式之建造者模式

建造者模式的应用

(创建型模式)建造者模式

设计模式之建造者模式简明示例