经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » Java相关 » 设计模式 » 查看文章
设计模式系列 - 建造者模式
来源:cnblogs  作者:hippieZhou  时间:2018/12/10 9:42:06  对本文有异议

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

介绍

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

类图描述

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

代码实现

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

  1. public interface IPacking
  2. {
  3. string Pack();
  4. }
  5. public interface IItem
  6. {
  7. string Name();
  8. IPacking Packing();
  9. float Price();
  10. }

2、定义抽象食物

  1. public abstract class ColdDrink:IItem
  2. {
  3. public abstract string Name();
  4. public IPacking Packing()
  5. {
  6. return new Bottle();
  7. }
  8. public abstract float Price();
  9. }
  10. public abstract class Burger:IItem
  11. {
  12. public abstract string Name();
  13. public IPacking Packing()
  14. {
  15. return new Wrapper();
  16. }
  17. public abstract float Price();
  18. }

3、定义具体制作类

  1. class Bottle:IPacking
  2. {
  3. public string Pack() => "Bottle";
  4. }
  5. public class Wrapper : IPacking
  6. {
  7. public string Pack() => "Wrapper";
  8. }

4、定义具体食物类

  1. public class Pepsi : ColdDrink
  2. {
  3. public override string Name() => "Pepsi";
  4. public override float Price() => 35.0f;
  5. }
  6. public class Coke : ColdDrink
  7. {
  8. public override string Name() => "Coke";
  9. public override float Price() => 30.0f;
  10. }
  11. public class VegBurger:Burger
  12. {
  13. public override string Name() => "Veg Burger";
  14. public override float Price() => 25.0f;
  15. }

5、定义模拟用户点餐类

  1. public class MealBuilder
  2. {
  3. public Meal PrepareVegMeal()
  4. {
  5. Meal meal = new Meal();
  6. meal.AddItem(new VegBurger());
  7. meal.AddItem(new Coke());
  8. return meal;
  9. }
  10. public Meal PrepareNonMeal()
  11. {
  12. Meal meal = new Meal();
  13. meal.AddItem(new ChickenBurger());
  14. meal.AddItem(new Pepsi());
  15. return meal;
  16. }
  17. }

6、上层调用

  1. class Program
  2. {
  3. static void Main(string[] args)
  4. {
  5. MealBuilder builder = new MealBuilder();
  6. Meal vegMeal = builder.PrepareVegMeal();
  7. Console.WriteLine("Veg Meal");
  8. vegMeal.ShowItems();
  9. Console.WriteLine($"Total Cost:{vegMeal.GetCost()}");
  10. Console.WriteLine("-----------------");
  11. Meal nonVegMeal = builder.PrepareNonMeal();
  12. Console.WriteLine("Non-Veg Meal");
  13. nonVegMeal.ShowItems();
  14. Console.WriteLine($"Total Cost:{nonVegMeal.GetCost()}");
  15. Console.ReadKey();
  16. }
  17. }

总结

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

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号