首页 > 其他 > 详细

建造者模式

时间:2015-12-31 01:39:57      阅读:209      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!