博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
装饰者模式-
阅读量:5761 次
发布时间:2019-06-18

本文共 2744 字,大约阅读时间需要 9 分钟。

1、个人理解:将主类中的不定个数的、无序的额外处理划分为多个类,在客户端的时候能够对这些额外处理随意与主体类进行组织。

看一段代码(根据别人的Java代码改的):卖饼,手抓饼和肉夹馍两种,可以添加的辅料有煎蛋、肉松等。

using System;using System.Collections.Generic;using System.Linq;using System.Text;using System.Threading.Tasks;namespace 装饰者模式2{    class Program    {        static void Main(string[] args)        {            Test test = new Test();            test.test();        }    }    public abstract class Pancake    {        public string desc = "我不是一个具体的饼";        public double price = 0;        public string GetDesc()        {            return desc;        }    }    ///     /// 手抓饼    ///     public class TornCake : Pancake    {        public TornCake()        {            desc = "手抓饼";            price = 4;        }    }    ///     /// 肉夹馍    ///     public class Roujiamo : Pancake    {        public Roujiamo()        {            desc = "肉夹馍";            price = 6;        }    }    ///     /// 作料    ///     public abstract class Condiment : Pancake    {        protected Pancake pancake;        public abstract string getDesc();        public abstract void AddCondiment(Pancake pancake);    }    ///     /// 煎蛋    ///     public class FiredEgg : Condiment    {        public FiredEgg()        {            price = 1;            desc = "煎蛋";        }        public override string getDesc()        {            return pancake.GetDesc() + ", 加煎蛋";        }        public override void AddCondiment(Pancake pancake)        {            this.pancake = pancake;            pancake.price += price;            pancake.desc += ", 加" + desc;        }    }    ///     /// 黄瓜    ///     public class Cucumber : Condiment    {        public Cucumber()        {            price = 2;            desc = "黄瓜";        }        public override string getDesc()        {            return pancake.GetDesc() + ", 加" + desc; ;        }        public override void AddCondiment(Pancake pancake)        {            this.pancake = pancake;            pancake.price += 2;            pancake.desc += ", 加黄瓜";        }    }    class Test    {        public void test()        {            Pancake pancake = new TornCake();            //手抓饼基础价            Console.WriteLine("描述:{0}, 基础价格:{1}", pancake.GetDesc(), pancake.price);            Pancake roujiamo = new Roujiamo();            //肉夹馍基础价            Console.WriteLine("描述:{0}, 基础价格:{1}", roujiamo.GetDesc(), roujiamo.price);            FiredEgg fireEgg = new FiredEgg();            Cucumber Cucumber = new Cucumber();            fireEgg.AddCondiment(roujiamo);            Cucumber.AddCondiment(roujiamo);            Console.WriteLine("描述:{0}, 价格:{1}", roujiamo.GetDesc(), roujiamo.price);            Console.ReadLine();        }    }}
View Code

 

转载于:https://www.cnblogs.com/duliduibai/p/9646723.html

你可能感兴趣的文章
Java虚拟机16:Metaspace
查看>>
Spark 底层网络模块
查看>>
New UWP Community Toolkit - RangeSelector
查看>>
51单片机开发板(W25Q16学习)
查看>>
TeamViewer远程协作软件支持哪些系统?
查看>>
php数组增加元素
查看>>
AOP AspectJ 切面 Android简单示例
查看>>
git不同分支局部代码合并 git cherry-pick
查看>>
Nancy之Cache的简单使用
查看>>
浅析如何在Nancy中使用Swagger生成API文档
查看>>
tomcat部署war包访问显示404
查看>>
java回调方法、钩子方法以及模板方法模式
查看>>
js如何生成[n,m]的随机数
查看>>
Eclipse Oxygen创建maven web项目(二)
查看>>
字符串转为数组
查看>>
ARM的启动代码(1):介绍(转)
查看>>
HDU 2203 亲串(kmp)
查看>>
nginx 与 lua 开发环境搭建
查看>>
JavaScript权威设计--Window对象(简要学习笔记十三)
查看>>
【Jqurey EasyUI+Asp.net】---DataGrid增加、删、更改、搜
查看>>