zoukankan      html  css  js  c++  java
  • 设计模式系列

    建造者模式通过将复杂对象逐一拆解成单一的简单对象,然后通过对简单对象的创建,最终构建出一个复杂对象。

    介绍

    在现实世界中,和建造者模式最为相似的是我们到餐厅点餐的流程。在点餐的过程中,我们是不用关系点餐的先后顺序,等我们点完后,点餐系统会自动将我们的所有餐品列表和消费情况全部一次性罗列出来,并且最后都会统一结算。这个过程其实就是建造者模式的应用。

    类图描述

    通过上述类图,我们可以发现一个复杂对象通过 MealBuilder 来进行创建,然后 MealBuilder 在进行细化,通过实例化不同的 IItem 类型,来达到创建不同的实例对象并对其进行最终的拼装组合。

    代码实现

    1、定义食物制作和信息接口

    public interface IPacking
    {
        string Pack();
    }
    
    public interface IItem
    {
        string Name();
        IPacking Packing();
        float Price();
    }
    

    2、定义抽象食物

    public abstract class ColdDrink:IItem
    {
        public abstract string Name();
    
        public IPacking Packing()
        {
            return  new Bottle();
        }
    
        public abstract float Price();
    }
    
    public abstract class Burger:IItem
    {
        public abstract string Name();
    
        public IPacking Packing()
        {
            return  new Wrapper();
        }
    
        public abstract float Price();
    }
    
    

    3、定义具体制作类

    class Bottle:IPacking
    {
        public string Pack() => "Bottle";
    }
    
    public class Wrapper : IPacking
    {
        public string Pack() => "Wrapper";
    }
    

    4、定义具体食物类

    public class Pepsi : ColdDrink
    {
        public override string Name() => "Pepsi";
    
        public override float Price() => 35.0f;
    }
    
    public class Coke : ColdDrink
    {
        public override string Name() => "Coke";
    
        public override float Price() => 30.0f;
    }
    
    public class VegBurger:Burger
    {
        public override string Name() => "Veg Burger";
    
        public override float Price() => 25.0f;
    }
    

    5、定义模拟用户点餐类

    public class MealBuilder
    {
        public Meal PrepareVegMeal()
        {
            Meal meal = new Meal();
            meal.AddItem(new VegBurger());
            meal.AddItem(new Coke());
            return meal;
        }
    
        public Meal PrepareNonMeal()
        {
            Meal meal = new Meal();
            meal.AddItem(new ChickenBurger());
            meal.AddItem(new Pepsi());
            return meal;
        }
    }
    

    6、上层调用

    class Program
    {
        static void Main(string[] args)
        {
            MealBuilder builder = new MealBuilder();
    
            Meal vegMeal = builder.PrepareVegMeal();
            Console.WriteLine("Veg Meal");
            vegMeal.ShowItems();
            Console.WriteLine($"Total Cost:{vegMeal.GetCost()}");
    
            Console.WriteLine("-----------------");
    
            Meal nonVegMeal = builder.PrepareNonMeal();
            Console.WriteLine("Non-Veg Meal");
            nonVegMeal.ShowItems();
            Console.WriteLine($"Total Cost:{nonVegMeal.GetCost()}");
    
            Console.ReadKey();
        }
    }
    

    总结

    建造者模式使用多个简单的对象进行拼装组合,并最终构建出一个复杂对象,它提供了一种创建对象的最佳方式。

  • 相关阅读:
    图片热点 网页划区 网页的拼接 表单
    html body的属性 格式控制标签 内容容器标签 超链接标签 图片标签 表格
    结构体
    out 传值
    c#数组,手机号随机数抽奖
    输入月份和日期,输出是今年的第多少天,利用switch和case
    c#,for穷举,百鸡百钱
    c#条件运算符的使用,判断时间是上午还是下午
    c#关于try catch finally的使用,判断日期格式是否正确
    c#数组,例题
  • 原文地址:https://www.cnblogs.com/hippieZhou/p/9940354.html
Copyright © 2011-2022 走看看