知识点

  类应该对扩展开放,对修改封闭。

案例

  (本故事纯属虚构)

  某日早上,流年刚把新开发的游戏项目提交给经理

     public abstract class Role
{
public virtual string RoleName { get; private set; }
public abstract int PhysicalAttack();
}
     class Samurai : Role
{
public override string RoleName
{
get
{
return "武士";
}
}
public override int PhysicalAttack()
{
return ;
}
}

  (当然这还算不上个游戏),项目经理看了没几分钟,“这什么屌逼玩意?游戏角色都不带装备的!!! 玩家还玩个屁啊”;

  “那好吧,给角色加把武器?”我弱弱的回了句。

  “你个2屌,加个武器就够了?至少弄上个法宝、宝宝、套装....”。经理逼逼了一大堆。

  "我靠,那怎么改?"我在心里默念了一句。

  “回去好好改去,******”经理又逼逼了一大堆。

  流年一溜烟,跑出了经理办公室,“还好溜的快,要不然口水都够洗脸了”。

  赶紧回去把代码改了下,*****,楼主指尖在键盘上框框飞舞。

  突然想到,我靠,要是哪天经理又要加点什么东西,岂不是很麻烦。

  赶紧Google找了本小黄书看了下,看看有什么好方法。哈哈哈...,有了,就是它了——《装饰者模式》。

  于是。。。

     //把装饰者抽象一下,这样再加什么东西直接继承他就行
public abstract class PropDocorator : Role
{
Role _role;
public PropDocorator(Role role)
{
_role = role;
}
public override string RoleName
{
get { return this._role.RoleName; }
}
public abstract string Docorate();
//新加了元素攻击
public abstract int ElementAttack();
}

  通过组合的方式,扩展了角色原有的功能,而且不需要去动原来的代码。

  给你加把刀试试火力

     class Knife:PropDocorator
{
Role _role;
private string _name = "贪狼刀"; public Knife(Role role):base(role) {
_role = role;
} public override string Docorate()
{
return this._role.RoleName + "装配" + this._name;
} public override int PhysicalAttack()
{
return this._role.PhysicalAttack() + ;
} public override int ElementAttack()
{
return ;
}
}

  好了,该加的都加上了,赶紧Debug下,试试

  aaarticlea/png;base64,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" alt="" />

  O了,这下再加个装备就简单了,直接继承装饰者的基类,去实现就行。赶紧把项目Submit,流年大摇大摆走进了经理办公室...

  

小结

  装饰者模式动态的将职责附加到对象上。若要扩展功能,装饰着可以比继承提供更具有弹性的方案。

  使代码具有弹性,可以应对改变,可以接受新的功能来应对改变的需求。

装饰者模式(Decorator pattern)的更多相关文章

  1. 浅谈设计模式--装饰者模式(Decorator Pattern)

    挖了设计模式这个坑,得继续填上.继续设计模式之路.这次讨论的模式,是 装饰者模式(Decorator Pattern) 装饰者模式,有时也叫包装者(Wrapper),主要用于静态或动态地为一个特定的对 ...

  2. 设计模式 - 装饰者模式(Decorator Pattern) Java的IO类 用法

    装饰者模式(Decorator Pattern) Java的IO类 用法 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26716 ...

  3. 设计模式 - 装饰者模式(Decorator Pattern) 具体解释

    装饰者模式(Decorator Pattern) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy/article/details/26707033 装饰者 ...

  4. 设计模式学习--装饰者模式(Decorator Pattern)

    概念: 装饰者模式(Decorator Pattern): 动态地将功能添加到对象,相比生成子类更灵活,更富有弹性. 解决方案: 装饰者模式的重点是对象的类型,装饰者对象必须有着相同的接口,也也就是有 ...

  5. 设计模式(三):“花瓶+鲜花”中的装饰者模式(Decorator Pattern)

    在前两篇博客中详细的介绍了"策略模式"和“观察者模式”,今天我们就通过花瓶与鲜花的例子来类比一下“装饰模式”(Decorator Pattern).在“装饰模式”中很好的提现了开放 ...

  6. C#设计模式之装饰者模式(Decorator Pattern)

    1.概述 装饰者模式,英文名叫做Decorator Pattern.装饰模式是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 2 ...

  7. 23种设计模式之装饰器模式(Decorator Pattern)

    装饰器模式(Decorator Pattern) 允许向一个现有的对象添加新的功能,同时又不改变其结构.这种类型的设计模式属于结构型模式,它是作为现有的类的一个包装. 这种模式创建了一个装饰类,用来包 ...

  8. 七个结构模式之装饰者模式(Decorator Pattern)

    定义: 使用组合的方法,动态给一个类增加一些额外的功能,避免因为使用子类继承而导致类继承结构复杂.并且可以保持和被装饰者同一个抽象接口,从而使客户端透明. 结构图: Component:抽象构件类,定 ...

  9. C#设计模式——装饰者模式(Decorator Pattern)

    一.例子在软件开发中,我们往往会想要给某一类对象增加不同的功能.比如要给汽车增加ESP.天窗或者定速巡航.如果利用继承来实现,就需要定义无数的类,Car,ESPCar,CCSCar,SunRoofCa ...

  10. 9.装饰者模式(Decorator Pattern)

    using System; namespace ConsoleApplication7 { class Program { static void Main(string[] args) { // 我 ...

随机推荐

  1. 谈谈.net模块依赖关系及程序结构

    技术为解决问题而生. 上面这个命题并非本文重点,我将来有空再谈这个.本文也并非什么了不起的技术创新,只是分享一下我对.net模块依赖关系及程序结构方面的一些看法.先看一个最最简单的hello worl ...

  2. MSDN Kinect for Windows SDK中文版论坛开放了

    昨天MSDN上K4W开发相关的中文版论坛正式开放了,地址 http://social.msdn.microsoft.com/Forums/zh-CN/home?forum=k4wdevelopment ...

  3. RabbitMQ(五) -- topics

    RabbitMQ(五) -- topics `rabbitmq`中的`topic exchange`将路由键和某模式进行匹配,从而类似于正则匹配的方式去接收喜欢的信息. topic exchange ...

  4. 手把手教你用python打造网易公开课视频下载软件2-编码相关说明

    函数getdownLoadInfo(url)主要实现核心功能:根据url地址,获取课程信息:课程名(courseTitle),课程数目(courseCount),可下载视频数目(videoCount) ...

  5. ReactMix框架,让你实现一套js代码,基于ReactNative在H5,App都能完美跑起来,Write Once,Run Anywhere

    ReactNative框架推出已经有一段时间了,相信很多小伙伴都在尝试实现Write Once, Run Anywhere的梦想,比如淘宝的ReactWeb等等,但是这些框架都局限于因为ReactNa ...

  6. IOS Socket 04-利用框架CocoaAsyncSocket实现客户端/服务器端

    这篇文章,我们介绍CocoaAsyncSocket框架的使用,主要介绍实现客户端/服务器端代码,相信在网上已经很多这样的文章了,这里做一下自己的总结.这里介绍使用GCD方式 一.客户端 1.下载地址 ...

  7. 每天一个linux命令(57):ss命令

    ss是Socket Statistics​的缩写.顾名思义,ss命令可以用来获取socket统计信息,它可以显示和netstat类似的内容.但ss的优势在于它能够显示更多更详细的有关TCP和连接状态的 ...

  8. js常用函数

    日期时间函数(需要用变量调用): var c=new Date; c.getDate(); document.write(c) //获取当前时间 var c=new Date(); c.getTime ...

  9. atitit..代码生成流程图 流程图绘制解决方案 java  c#.net  php v2

    atitit..代码生成流程图 流程图绘制解决方案 java  c#.net  php v2 1.1. Markdown 推荐,就是代码和flow都不能直接使用.1 1.2. Java code2fl ...

  10. Atitit vod click event design flow  视频点播系统点击事件文档

    Atitit vod click event design flow  视频点播系统点击事件文档 重构规划1 Click cate1 Click  mov4 重构规划 事件注册,与事件分发管理器分开 ...