惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

腾讯CDC
The Cloudflare Blog
IT之家
IT之家
V
V2EX
雷峰网
雷峰网
MyScale Blog
MyScale Blog
P
Proofpoint News Feed
Stack Overflow Blog
Stack Overflow Blog
博客园 - Franky
Engineering at Meta
Engineering at Meta
S
SegmentFault 最新的问题
GbyAI
GbyAI
Microsoft Azure Blog
Microsoft Azure Blog
博客园 - 司徒正美
云风的 BLOG
云风的 BLOG
小众软件
小众软件
博客园 - 叶小钗
Blog — PlanetScale
Blog — PlanetScale
C
Check Point Blog
A
About on SuperTechFans
B
Blog
月光博客
月光博客
宝玉的分享
宝玉的分享
Last Week in AI
Last Week in AI

博客园 - ZYB

利用ResultFilter实现asp.net mvc 页面静态化 redis文章索引 memcache文章索引 Redis文章索引 Windows 性能监视器的基本指标(CPU,内存,硬盘参数) Advanced Logging: 伺服器記錄管理的好幫手(台湾微软 IIS 官方网站 ) MySpace DataRelay 分布式数据缓存源码分析[转] Mono for Android 篇二 使用Spinner 实现下拉列表读取Browser.BookmarksUri Mono for Android 篇一 环境的搭建 在vs2010中使用nuget安装EF5报错解决方案 Sql server 2008 的完成备份和差异备份 将Microsoft Ajax Minifier集成到VS2010对JS,CSS进行编译时压缩 ubuntu 10.4.4 server下AWStats分析和查看Nginx的web访问日志 securecrt_linux客户端连接工具连接不上VM中的ubuntu discuz!nt 论坛不能显示upload orumicons下图片的问题 ubuntu软件中心崩溃解决方法 兼容Firefox和IE5+的去掉textbox自动完成输入 教你轻轻松松打包Web应用 八款开源 Android 游戏引擎 (巨好的资源)
装饰器模式
ZYB · 2013-02-08 · via 博客园 - ZYB

关于装饰器模式

terrylee大哥的这篇文章已经说的很详细了

  http://terrylee.cnblogs.com/archive/2006/03/01/340592.html

这里只是记录一下我自己对装饰器模式理解,实现的一个实例,方便温故而知新

class 装饰
   {
       static void Main(string[] args)
       {
           ICar tank = new BM();//车的基本功能
           tank = new CarA(tank);//在车的基本功能上装饰上 自动档功能
           tank = new CarB(tank);//在车的基本功能和自动档功能上装饰上 定速巡航功能
           tank.Act();
           Console.ReadLine();
       }
   }

   public interface ICar
   {
       void Act();
   }

   public abstract class Car : ICar
   {
       public virtual void Act()
       {
           Console.WriteLine("基本功能");
       }
   }

   public class BM : Car
   {
       public override void Act()
       {
           base.Act();
           Console.WriteLine("宝马特殊功能");
       }
   }

   public class CarA : ICar//自动档功能装饰器
   {
       ICar car = null;
       public CarA(ICar tank)
       {
           this.car = tank;
       }
       public void Act()
       {
           car.Act();
           Console.WriteLine("装饰自动档功能");
       }
   }


   public class CarB : ICar//装饰定速巡航功能装饰器
   {
       ICar car = null;
       public CarB(ICar tank)
       {
           this.car = tank;
       }
       public void Act()
       {
           car.Act();
           Console.WriteLine("装饰定速巡航功能");

       }
   }