• 建造者模式的应用


    一、实验目的:

    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)的特点,分析具体问题,使用建造者模式进行设计。也称生成器模式,生成器模式将所建造的产品(通常是一个复合体)最后一次性返回。

    作者:马家升
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    初识echarts
    深浅拷贝的理解
    react基本语法及组件
    webpack使用
    网上面试资料整理
    封装原生promise函数
    vue路由懒加载及组件懒加载
    译文---C#堆VS栈(Part Four)
    译文---C#堆VS栈(Part Three)
    译文---C#堆VS栈(Part Two)
  • 原文地址:https://www.cnblogs.com/majiasheng/p/10702341.html
Copyright © 2020-2023  润新知