首页 > 其他分享 >设计模式之装饰者模式,奶茶店场景

设计模式之装饰者模式,奶茶店场景

时间:2023-03-16 15:56:58浏览次数:42  
标签:场景 double Price 奶茶 new 设计模式 decorators public

// See https://aka.ms/new-console-template for more information
using System.Drawing;

/*
  装饰者模式,不改变实现类的情况下,动态给实现类增加新功能,这里使用聚合关系实现
奶茶店 实现点奶茶加不同的料,计算价格的场景,使用装饰者模式实现 优点,新增一种小料时只需要实现IDecorator接口即可扩展,符合开闭原则 */ var beverage = new MilkTea(); //先点一杯奶茶 beverage.Add(new Pudding()); //加一份布丁 beverage.Add(new Boba()); //加一份珍珠 Console.WriteLine($"Hello, World {beverage.Cost()}"); //算出价格 /// <summary> /// 饮料基类 /// </summary> abstract class Beverage { protected readonly List<IDecorator> decorators; public Beverage() { decorators = new List<IDecorator>(); } public void Add(IDecorator decorator) { decorators.Add(decorator); } public abstract double Cost(); } /// <summary> /// 奶茶 /// </summary> class MilkTea : Beverage { private double PRICE = 15; public override double Cost() { return PRICE + decorators.Sum(s => s.Price); } } /// <summary> /// 水果茶 /// </summary> class FruitTea : Beverage { private double PRICE = 20; public override double Cost() { return PRICE + decorators.Sum(s => s.Price); } } /// <summary> /// 小料接口(装饰者) /// </summary> interface IDecorator { double Price { get; set; } } /// <summary> /// 布丁 3元一份 /// </summary> class Pudding : IDecorator { public double Price { get; set; } = 3; } /// <summary> /// 珍珠 两元一份 /// </summary> class Boba : IDecorator { public double Price { get; set; } = 2; }

 

标签:场景,double,Price,奶茶,new,设计模式,decorators,public
From: https://www.cnblogs.com/Newd/p/17222901.html

相关文章

  • 设计模式1——单例模式
    单例模式:在使用构造函数时,保证全局只有一个new出来的对象,后续无论如何调用,都是显示为第一次构造的对象;需更改内部属性,可以通过提供函数接口更改核心:确保只有一个实例,并......
  • 25-设计模式总结
    25-设计模式总结分类设计模式可以分为3类:创建型模式结构型模式行为型模式创建型模式抽象工厂模式提供一个创建一系列或相关依赖对象的接口,而无需指定他们具体的类......
  • 【设计模式】外观模式
    1.外观模式(FacadePattern)的定义外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。使用外观模式时,我们创建了一个统......
  • 性能测试从零开始实施指南——场景模型篇
    转载:https://www.cnblogs.com/imyalost/p/11415691.html今年跳槽到一家电商企业,性能测试需要从零开始。在性能测试不断推动落地过程中,积累了一些从零开始的经验和教训,自己......
  • 前端设计模式——迭代器模式
    迭代器模式(IteratorPattern):提供一种方法顺序访问一个聚合对象中的各个元素,而不需要暴露该对象的内部表示。在JavaScript中,可以使用迭代器模式来操作数组或类数组对象。在......
  • oop设计模式
    设计模式软件设计模式是一套反复使用,经验性的总结,具有一定普遍性,可以反复使用1.软件设计原则1.1开闭原则对拓展开放,对修改关闭。在程序需要进行拓展时,不去修改原有的......
  • 关于java对接物联网设备自定义协议的安全性,以及长链接场景下需要注意的事项
    目前从事于物联网行业。共享充电宝。负责通讯相关。当前设备在线量约50W台。记录一下走得弯路。方便大家借鉴。文笔不太好,希望大家轻喷。本文主要是从以下几个方......
  • @Transaction注解的失效场景
    作者:京东物流孔祥东背景事情是这样,最近在实现一个需求的时候,有一个定时异步任务会捞取主表的数据并置为处理中(为了防止任务执行时间过长,下次任务执行把本次数据重复捞取),然......
  • Cesium 与 Babylon.js 可视化 第一个场景
    我决定不从Babylonjs基础来讲了直接整合cesium与babylonjs可视化来讲 我整合一个类库后续不断更新中```javascript npmi@haibalai/cesium-babylonjs ``` ......
  • 设计模式(二十一)----行为型模式之状态模式
    1概述【例】通过按钮来控制一个电梯的状态,一个电梯有开门状态,关门状态,停止状态,运行状态。每一种状态改变,都有可能要根据其他状态来更新处理。例如,如果电梯门现在处于运行......