再次温故--装饰模式

  今天学习python的时候遇到装饰器,文章说跟装饰模式差不多,想到之前看过的装饰模式,现在已经淡然忘却,重拾记忆,搜索装饰模式,自己有C#语法的基础也就找到一篇用C#语法写的,自己之前看到一个孙悟空的例子,结合这次,自己编写一遍.

namespace ProTest
{
    abstract class  齐天大圣
    {
        public abstract void 变();
    }
    class 孙悟空: 齐天大圣
    {
        public override void 变()
        {
            Console.WriteLine("我要变身了");
        }
    }

    class 七十二变 : 齐天大圣
    {
        protected 齐天大圣 大圣;
        public void 设置(齐天大圣 齐天)
        {
            大圣 = 齐天;
        }
        public override void 变()
        {
            if (大圣 != null)
            {
                大圣.变();
            }
        }
    }
    class 鱼 : 七十二变
    {
        public override void 变()
        {
            base.变();
            Console.WriteLine("会游泳了.");
        }
    }
    class 鸟 : 七十二变
    {
        public override void 变()
        {
            base.变();
            Console.WriteLine("会飞了.");
        }
    }
    class Program
    {
        static void Main(string[] args)
        {
            孙悟空 猴子 = new 孙悟空();
            鱼 小鱼 = new 鱼();
            鸟 小鸟 = new 鸟();
            小鱼.设置(猴子);
            小鸟.设置(小鱼);
            小鸟.变();
            Console.Read();
        }
    }
}

  结果:

我突如其来的想法,C#支持中文就使用了中文命名.只是为了理解设计模式..

  如果单纯的设计模式,那我也不会贴出来献丑.只是中间遇到一些问题,为了让初学者少走弯路,分享一些我遇到的问题.

  在这里如果不太理解override的话,对这段代码也就理解的不够深刻.

  如果感觉已经理解,那么请问鱼类和鸟类去掉override,将会输出什么?

  只会输出.

  写这一段代码的时候,很顺利写下来.最后运行的时候,结果不对,才发现没有加override,赤裸裸的说明自己基础没有夯实.

  于是想到了之前看过的问题,自己测试了一下也就明白了override了:

  

  

  如果理解这四张图输出结果.那就理解了override了.自己动手测试一下吧..

  如果自己对new关键字理解不太清楚,也可以结合这4张图理解一下new关键隐藏基类含义.

  

时间: 2024-11-09 07:04:20

再次温故--装饰模式的相关文章

对复合(协作)算法/策略的封装方法——装饰模式总结

前言 装饰模式顾名思义就是在不改变原对象的前提下,将新功能优雅的附加(装饰)到该对象上,可以实现对复合算法(策略)的优雅封装.对需要协作的算法(策略)进行有机组合. 装饰模式和策略模式用法类似,但是也有明显区别——策略模式运行时只能运行一个算法,且其各个算法(算法族)之间必须相互独立,不能有联系,装饰模式没有这些约束. 装饰模式和策略模式一样,也是对继承的一种替代方案——使用对象组合的方式,做到运行时装饰对象,从而优雅的替代死板的继承. 另外,装饰模式是对象的结构型模式. 再议继承的缺陷 在策略

C# Stream篇(六) -- BufferedStream

BufferedStream 目录: 简单介绍一下BufferedStream 如何理解缓冲区? BufferedStream的优势 从BufferedStream 中学习装饰模式 如何理解装饰模式 再次理解下装饰模式在Stream中的作用 BufferedStream的构造 BufferedStream的属性 BufferedStream的方法 简单示例:利用socket 读取网页并保存在本地 本章总结 1 简单介绍一下BufferedStream 在前几章的讲述中,我们已经能够掌握流的基本特

评温斯坦的炒股书(非常重要,常看看)

http://blog.sina.com.cn/s/blog_674caeca0101dlgq.html 技术分析的经典书籍,就我个人的观点而言,技术分析书籍多数是浪费时间和误人子弟的,纯粹技术分析的书籍不可多读.但我现在要强烈推荐一本技术分析的经典书籍:<史丹·温斯坦称傲牛熊市的秘密>(Stan Weinstein's Secrets for Profiting in Bull and Bear Markets),台湾版名为<多空操作秘笈>.在我的阅读视野内(约300本.近万元投

JAVA设计模式之 装饰模式【Decorator Pattern】

一.概述 动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活.装饰模式是一种对象结构型模式.装饰模式是一种用于替代继承的技术,使用对象之间的关联关系取代类之间的继承关系.在装饰模式中引入了装饰类,在装饰类中既可以调用待装饰的原有类的方法,还可以增加新的方法,以扩充原有类的功能. 二.适用场景 装饰原有对象.在不改变原有对象的情况下扩展增强新功能/新特征..当不能采用继承的方式对系统进行扩展或者采用继承不利于系统扩展和维护时可以使用装饰模式. 三.UML类图 四

IT小李传--药店里的装饰模式

有了好的管理,在各个角色的员工都能 很好地完成本职工作的基础上,小李的药店生意自然蒸蒸日上.现在,小李的药店已经初具规模,与周围的药店相比,已经不落下风了.这使得小李有了进一步拓展业务的想法. 当下,药店已经不仅仅卖纯正的药品了,很多药店里,有了很多保健品.这个东西,价格高,利润也高,并不是因为它有多好,而是迎合了很多人的心理和需求.特别是现在很多人拿保健品送礼,使得它行情更加看好. 因此,小李也将业务拓展到了保健品,并招聘了几名员工,专门负责保健品柜台,可是,在一段时间之后,这个柜台出现了问题

第8章 装饰模式(Decorator Pattern)

原文 第8章 装饰模式(Decorator Pattern) 概述: 装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 装饰模式的特点: (1) 装饰对象和真实对象有相同的接口.这样客户端对象就可以和真实对象相同的方式和装饰对象交互. (2) 装饰对象包含一个真实对象的引用(reference) (3) 装饰对象接受所有来自客户端的请求.它把这些请求转发给真实的对象. (4) 装饰对象可以在转发这些请求以前或以后增加

再温http协议,入门手册。

引言 HTTP是一个属于应用层的面向对象的协议,由于其简捷.快速的方式,适用于分布式超媒体信息系统.它于1990年提出,经过几年的使用与发展,得到不断地完善和扩展.目前在WWW中使用的是HTTP/1.0的第六版,HTTP/1.1的规范化工作正在进行之中,而且HTTP-NG(Next Generation of HTTP)的建议已经提出. HTTP协议的主要特点可概括如下: 1.支持客户/服务器模式. 2.简单快速:客户向服务器请求服务时,只需传送请求方法和路径.请求方法常用的有GET.HEAD.

设计模式漫谈之装饰模式

我有点像疯子,一个人开了一天酒店,来写这个.我发现我写这个系列,阅读的人很少.也许是程序员不重视思想的东西,也许是感觉我写的很Low,无所谓,我只想告诉同行,程序员重在编程思想,有了编程思想技术的路才能走的更长更远.我很孤独,在自己的小世界里存活着.但是我也要耐着孤独,向更好的方向发展需要孤独,孤独也是一种享受生命的过程. 给一个方法拓展功能,像面向结构中,一个方法里调用多个方法.在面向对象设计中可以是调用基类的方法,子类重写的时候增加功能.再次说下语言层面的东西,类,抽象类,接口的关系,是一种

装饰模式 - 女屌丝逆袭白富美案例

接下来用一个女屌丝变白富美的案子,来描述装饰模式. 一.女孩接口 首先,无论是女屌丝,还是白女孩.富女孩.美女孩,都是女孩. 所以定义女孩接口IGirl如下,其中show方法,就是女孩来展现自己现在的状态...... public interface IGirl { public void show(); } 二.女屌丝登场 女屌丝:BaseGirl.意思就是最基础.一无所有的女孩(女屌丝). show方法实现了接口,女屌丝目前一无所有,只能说:我是女孩 public class BaseGir