zoukankan      html  css  js  c++  java
  • 建造者模式(例子)

    根据上述要求来用建造者模式设计程序。我将程序放在了https://github.com/RoyalBob/Builder-Mode-Practice.git   欢迎访问。

    以下是本程序的UML图以及代码:

    1、创建一个创造套餐的建造者接口IMealBuilder

    1 public interface IMealBuilder {
    2 
    3     public void BuildBurger();
    4     public void BuildChips();
    5     public void BuildDrink();
    6     Meal GetMeal();
    7 }

    2、编写Meal类用来存放建造者需要建造的食物。

     1 public class Meal
     2 {
     3     private  List<IFood> foodList=new ArrayList<IFood>();
     4     public void addFood( IFood food )
     5     {
     6         foodList.add(food);
     7     }
     8     public void Show()
     9     {
    10         for (int i=0; i<foodList.size(); i++)
    11         {
    12             foodList.get(i).Make();
    13         }
    14     } 
    15 }

    3、分别创建肯德基、麦当劳两家店的建造者KFCBuilder、McDonaldBuilder,这两家店都有相似套餐:汉堡+薯条+饮料,但是产品不同。所以都继承同样的建造过程IMealBuilder

    以下是肯德基的建造者KFCBuilder:

     1 public class KFCBuilder implements IMealBuilder
     2 {
     3     protected Meal meal=new Meal();
     4     @Override
     5     public void BuildBurger() {
     6         // TODO Auto-generated method stub
     7         IFood food = new KFCBurger();
     8         meal.addFood(food);
     9     }
    10 
    11     @Override
    12     public void BuildChips() {
    13         // TODO Auto-generated method stub
    14         IFood food = new KFCChips();
    15         meal.addFood(food);
    16     }
    17 
    18     @Override
    19     public void BuildDrink() {
    20         // TODO Auto-generated method stub
    21         IFood food = new KFCDrink();
    22         meal.addFood(food);
    23     }
    24 
    25     @Override
    26     public Meal GetMeal() {
    27         // TODO Auto-generated method stub
    28         return meal;
    29     }
    30 }

    以下是麦当劳的建造者McDonaldBuilder:

     1 public class McDonaldBuilder implements IMealBuilder{
     2 
     3     protected Meal meal=new Meal();
     4     @Override
     5     public void BuildBurger() {
     6         // TODO Auto-generated method stub
     7         IFood food = new McDonaldBurger();
     8         meal.addFood(food);
     9     }
    10 
    11     @Override
    12     public void BuildChips() {
    13         // TODO Auto-generated method stub
    14         IFood food = new McDonaldChips();
    15         meal.addFood(food);
    16     }
    17 
    18     @Override
    19     public void BuildDrink() {
    20         // TODO Auto-generated method stub
    21         IFood food = new McDonaldDrink();
    22         meal.addFood(food);
    23     }
    24 
    25     @Override
    26     public Meal GetMeal() {
    27         // TODO Auto-generated method stub
    28         return meal;
    29     }
    30 }

    4、创建一个指挥者MealDirector用来负责控制产品的创建过程。

     1 public class MealDirector{
     2     
     3     private IMealBuilder _builder;
     4     public MealDirector( IMealBuilder builder )
     5     {
     6         _builder = builder;
     7     }
     8     public Meal CreateMeal()
     9     {
    10         _builder.BuildBurger();
    11         _builder.BuildChips();
    12         _builder.BuildDrink();
    13         
    14         return _builder.GetMeal(); 
    15     }
    16 }

    5、创建一个食物的接口IFood,具有制作食物的方法Make()。

    1 public interface IFood{
    2    
    3     public abstract void Make();
    4 }

    6、分别编写肯德基、麦当劳各种食品的制作方法,以输出为反馈。

    1 public class KFCBurger implements IFood {
    2 
    3     @Override
    4     public void Make() {
    5         // TODO Auto-generated method stub
    6         System.out.println("KFC汉堡做好了!");        
    7     }
    8     
    9 }
    KFCBurger
    1 public class KFCChips implements IFood {
    2 
    3     @Override
    4     public void Make() {
    5         // TODO Auto-generated method stub
    6         System.out.println("KFC薯条做好了!");
    7     }
    8 
    9 }
    KFCChips
    1 public class KFCDrink implements IFood {
    2 
    3     @Override
    4     public void Make() {
    5         // TODO Auto-generated method stub
    6         System.out.println("KFC饮料做好了!");
    7     }
    8 
    9 }
    KFCDrink
    1 public class McDonaldBurger implements IFood {
    2 
    3     @Override
    4     public void Make() {
    5         // TODO Auto-generated method stub
    6         System.out.println("McDonald汉堡做好了!");
    7     }
    8 
    9 }
    McDonaldBurger
    1 public class McDonaldChips implements IFood {
    2 
    3     @Override
    4     public void Make() {
    5         // TODO Auto-generated method stub
    6         System.out.println("McDonald薯条做好了!");
    7     }
    8 
    9 }
    McDonaldChips
    1 public class McDonaldDrink implements IFood {
    2 
    3     @Override
    4     public void Make() {
    5         // TODO Auto-generated method stub
    6         System.out.println("McDonald饮料做好了!");
    7     }
    8 
    9 }
    McDonaldDrink

    7、书写主函数Main来分别创建肯德基和麦当劳的建造者和指挥者,来制作各自的套餐。

     1 public class Main {
     2 
     3     public static void main(String[] args) {
     4         // TODO Auto-generated method stub
     5         IMealBuilder builder1 = new KFCBuilder();
     6         MealDirector director1 = new MealDirector(builder1);
     7         director1.CreateMeal().Show();;
     8 
     9         IMealBuilder builder2 = new McDonaldBuilder();
    10         MealDirector director2 = new MealDirector(builder2);
    11         director2.CreateMeal().Show();
    12     }
    13 
    14 }

    输出结果看是否符合要求:

  • 相关阅读:
    集合
    字典
    列表
    事件兼容性封装
    E5中遍历数组的方法
    canvas绘制三等分饼型图
    canvas制作刮刮乐案例
    canvas绘制饼型图
    javascript中手风琴特效
    javascript中client()兼容性封装
  • 原文地址:https://www.cnblogs.com/RoyalBob/p/5081366.html
Copyright © 2011-2022 走看看