码迷,mamicode.com
首页 > 其他好文 > 详细

建造者模式

时间:2015-12-31 01:42:23      阅读:350      评论:0      收藏:0      [点我收藏+]

标签:

(1)先创建一个建造者接口IMealBuilder来创建套餐

public interface IMealBuilder
 {
    public void BuildBurger();
    public void BuildChips();
    public void BuildDrink();
    Meal GetMeal();
}

(2)用Meal类存放建造者需要建造的食物。

public class Meal
{
    private  List<IFood> foodList=new ArrayList<IFood>();
    public void addFood( IFood food )
    {
        foodList.add(food);
    }
    public void Show()
    {
        for (int i=0; i<foodList.size(); i++)
        {
            foodList.get(i).Make();
        }
    } 
}

(3)分别创建肯德基、麦当劳两家店的建造者KFCBuilder、McDonaldBuilder都继承同样的建造过程IMealBuilder。

public class KFCBuilder implements IMealBuilder//KFC
{
    protected Meal meal=new Meal();
    public void BuildBurger()
    {
        IFood food = new KFCBurger();
        meal.addFood(food);
    }

    public void BuildChips() 
    {
        IFood food = new KFCChips();
        meal.addFood(food);
    }

    public void BuildDrink()
    {
        IFood food = new KFCDrink();
        meal.addFood(food);
    }

    public Meal GetMeal() 
   {
        return meal;
    }
}

public class McDonaldBuilder implements IMealBuilder//McDonald
{

    protected Meal meal=new Meal();
    public void BuildBurger()
    {
        IFood food = new McDonaldBurger();
        meal.addFood(food);
    }

    public void BuildChips() 
   {
        IFood food = new McDonaldChips();
        meal.addFood(food);
    }

    public void BuildDrink() 
   {
        IFood food = new McDonaldDrink();
        meal.addFood(food);
    }

    public Meal GetMeal()
    {
        return meal;
    }
}

(4)创建一个指挥者MealDirector负责控制产品创建。

public class MealDirector
{ 
    private IMealBuilder _builder;
    public MealDirector( IMealBuilder builder )
    {
        _builder = builder;
    }
    public Meal CreateMeal()
    {
        _builder.BuildBurger();
        _builder.BuildChips();
        _builder.BuildDrink();
        
        return _builder.GetMeal(); 
    }
}

(5)创建一个食物的接口IFood,具有制作食物的方法Make(),分别编写肯德基、麦当劳各种食品的制作方法。

public interface IFood
{
     public abstract void Make();
 }
//KFC
public class KFCBurger implements IFood 
{
     public void Make() 
    {
         System.out.println("KFC汉堡做好了!");        
     }
 }

 public class KFCChips implements IFood
 {
     public void Make()
     {
         System.out.println("KFC薯条做好了!");
     }
 }

 public class KFCDrink implements IFood
 {
     public void Make()
     {
         System.out.println("KFC饮料做好了!");
     }
 }
//McDonald
 public class McDonaldBurger implements IFood
 {
     public void Make() 
     {
         System.out.println("McDonald汉堡做好了!");
     }
 }

 public class McDonaldChips implements IFood 
{
     public void Make() 
     {
         System.out.println("McDonald薯条做好了!");
     }
 }

 public class McDonaldDrink implements IFood 
{
     public void Make() 
     {
         System.out.println("McDonald饮料做好了!");
     }
 }

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

public class Main 
{

    public static void main(String[] args) 
   {

        IMealBuilder builder1 = new KFCBuilder();
        MealDirector director1 = new MealDirector(builder1);
        director1.CreateMeal().Show();;

        IMealBuilder builder2 = new McDonaldBuilder();
        MealDirector director2 = new MealDirector(builder2);
        director2.CreateMeal().Show();
    }

}

输出结果:

技术分享

建造者模式

标签:

原文地址:http://www.cnblogs.com/gzy1031/p/5090404.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!