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

推荐订阅源

让小产品的独立变现更简单 - ezindie.com
让小产品的独立变现更简单 - ezindie.com
U
Unit 42
IT之家
IT之家
Y
Y Combinator Blog
T
Tailwind CSS Blog
B
Blog
大猫的无限游戏
大猫的无限游戏
博客园 - 叶小钗
Jina AI
Jina AI
freeCodeCamp Programming Tutorials: Python, JavaScript, Git & More
I
InfoQ
J
Java Code Geeks
F
Fortinet All Blogs
T
The Blog of Author Tim Ferriss
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
H
Hackread – Cybersecurity News, Data Breaches, AI and More
人人都是产品经理
人人都是产品经理
腾讯CDC
Hugging Face - Blog
Hugging Face - Blog
GbyAI
GbyAI
博客园 - 司徒正美
The GitHub Blog
The GitHub Blog
酷 壳 – CoolShell
酷 壳 – CoolShell
L
LangChain Blog

博客园 - 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("装饰定速巡航功能");

       }
   }