zoukankan      html  css  js  c++  java
  • 建造者模式的应用

    一、实验目的:

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

    作者:马家升
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。
  • 相关阅读:
    NoSql
    事务简介
    c#批量插入
    SqlServer中获取所有数据库,所有表,所有字段
    企业需要k2来解放孤岛危机
    路在何方?移动互联网浪潮下房地产转型之路探讨
    卡斯柯经验谈│流程驱动项目管理的应用
    【干货来了】2014年K2房地产IT分享峰会
    【快报】基于K2 BPM的新一代协同办公门户实践交流会
    元祖签约K2 BPM,引领绿色健康食品!
  • 原文地址:https://www.cnblogs.com/majiasheng/p/10702341.html
Copyright © 2011-2022 走看看