前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >C#设计模式——(结构型-装饰器设计模式)

C#设计模式——(结构型-装饰器设计模式)

原创
作者头像
用户10053120
发布2022-10-10 17:51:02
4800
发布2022-10-10 17:51:02
举报
文章被收录于专栏:C# 设计原则

一、应用场景

奶茶店里售卖不同饮料,搭配不同配料。

如果想要一杯奶茶,加两份布丁,加一份珍珠。

二、装饰器模式定义

动态的给一个对象添加一些额外的职责,就增加功能来说比添加子类更加灵活。

有效的把类的核心职责和装饰功能分开解耦了。

示例代码:

代码语言:javascript
复制
       public abstract class YinLiao
        {
            public abstract double Cost();
        }
        public class MilkTea : YinLiao
        {
            public override double Cost()
            {
                Console.WriteLine("奶茶10一杯");
                return 10;
            }
        }
        public class FruitTea : YinLiao
        {
            public override double Cost()
            {
                Console.WriteLine("果茶20一杯");
                return 10;
            }
        }
        public class SudaTea : YinLiao
        {
            public override double Cost()
            {
                Console.WriteLine("苏打饮料20一杯");
                return 10;
            }
        }
        //Decorater类
        public abstract class Decorater:YinLiao
        {
            //添加父类的引用
            private YinLiao Yinglaio;
            //通过set方法,给他赋值
            public void SetComponent(YinLiao yinglaio)
            {
                this.Yinglaio = yinglaio;
            }
            public override double Cost()
            {
               return this.Yinglaio.Cost();
            }
        }
        public class Buding:Decorater
        {
            private static double money = 5;
            public override double Cost()
            {
                Console.WriteLine("布丁5块");
                return base.Cost()+money;
            }
        }
        public class XianCao : Decorater
        {
            private static double money = 6;
            public override double Cost()
            {
                Console.WriteLine("仙草6块");
                return base.Cost() + money;
            }
        }
        public class Zhenzhu : Decorater
        {
            private static double money = 7;
            public override double Cost()
            {
                Console.WriteLine("珍珠5块");
                return base.Cost() + money;
            }
        }
代码语言:javascript
复制
            MilkTea milkTea = new MilkTea();
            Buding buding1 = new Buding();
            Buding buding2= new Buding();
            Zhenzhu zhenzhu = new Zhenzhu();
            buding1.SetComponent(milkTea);
            buding2.SetComponent(buding1);
            zhenzhu.SetComponent(buding2);
            Console.WriteLine(zhenzhu.Cost());

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档