简单实现建造者模式

建造者模式UML类图:

MealBuilder(建造者接口)

interface MealBuilder
    {
        void BuildBurger();
        void BuildChicken();
        void BuildDrink();
        Meal GetMeal();
    }

KFCBuilder(具体建造者A)

public class KFCBuilder:MealBuilder
{
    protected Meal meal=new Meal();
    public void BuildBurger()
    {
        Food food = new KFC_Burger();
        meal.AddFood(food);
    }
    public void BuildChicken()
    {
        Food food = new KFC_Chicken();
        meal.AddFood(food);
    }
    public void BuildDrink()
    {
        Food food = new KFC_Drink();
        meal.AddFood(food);
    }
    public Meal GetMeal()
    {
        return meal;
    }
}

McDonaldsBuilder(具体建造者B)

public class McDonaldsBuilder:MealBuilder
{
    protected Meal meal=new Meal();
    public void BuildBurger()
    {
        Food food = new McDonalds_Burger();
        meal.AddFood(food);
    }
    public void BuildChicken()
    {
        Food food = new McDonalds_Chicken();
        meal.AddFood(food);
    }
    public void BuildDrink()
    {
        Food food = new McDonalds_Drink();
        meal.AddFood(food);
    }
    public Meal GetMeal()
    {
        return meal;
    }
}

Director(指挥者)

class Director
{
    private MealBuilder builder;
    public Director(MealBuilder builder)
    {
        this.builder = builder;
    }
    public Meal BuildMeal()
    {
        this.builder.BuildBurger();
        this.builder.BuildChicken();
        this.builder.BuildDrink();
        return this.builder.GetMeal();
    }
}

Meal(具体产品类)

public class Meal
{
    private  List<Food> foodList=new List<Food>();
    public void AddFood(Food food)
    {
        this.foodList.Add(food);
    }
    public void show()
    {
        foreach (Food element in foodList)
        {
            element.deal();
        }
    } 
}

Food(‘零件’接口)

public interface Food
{
    void deal();
}

KFC_Burger(产品‘零件‘partA1)

public class KFC_Burger:Food
{
    public void deal()
    {
        Console.WriteLine("您的KFC汉堡");
    }
}

KFC_Chicken(产品‘零件‘partA2)

public class KFC_Chicken:Food
{
    public void deal()
    {
        Console.WriteLine("您的KFC炸鸡");
    }
}

KFC_Drink(产品‘零件‘partA3)

public class KFC_Drink:Food
{
     public void deal()
     {
         Console.WriteLine("您的KFC饮料");
     }
}

McDonalds_Burger(产品‘零件‘partB1)

public class McDonalds_Burger:Food
{
    public void deal()
    {
        Console.WriteLine("您的麦当劳汉堡");
    }
}

McDonalds_Chicken(产品‘零件‘partB2)

public class McDonalds_Chicken:Food
{
    public void deal()
    {
        Console.WriteLine("您的麦当劳炸鸡");
    }
}

McDonalds_Drink(产品‘零件‘partB3)

public class McDonalds_Drink:Food
{
    public void deal()
    {
        Console.WriteLine("您的麦当劳饮料");
    }
}

Client(测试类)

class Client
{
    static void Main(string[] args)
    {
        MealBuilder b1 = new KFCBuilder();
        Director d1 = new Director(b1);
        Meal meal1 = d1.BuildMeal();
        meal1.show();

        MealBuilder b2 = new McDonaldsBuilder();
        Director d2 = new Director(b2);
        Meal meal2 = d2.BuildMeal();
        meal2.show();
        Console.Read();
    }
}

测试结果

原文地址:https://www.cnblogs.com/detective-blog/p/4942524.html