.NET中的设计模式之发现装饰模式
分类:.NET
来源:网络
时间:2010-10-23 14:41:02
过去我的一个朋友常说,学习任何编程语言最困难的部分是运行“Hello World”,之后一切都很容易。多年以后,我才意识到他说的很对。学习设计模式的基本目标是要用它,尤其是帮助那些有扎实的OOP基础,而对设计模式很困惑的人在设计中应用它。我不会为不同设计模式写很全面的参考,但我希望这些文章能让你入门。设计模式与特定的语言无关。虽然我用C#写了很多示例,但我尽量避免一些C#特有的结构,因此它面向大部分人,尤其是使用C++的人。
装饰器模式允许我们动态为对象添加行为。下面我们先介绍一个场景,然后寻找替代方法。这会帮助我们认清该模式的真实用途,尤其在灵活性这方面。
思考过程
今天我们参考的不是一个实际的场景,有时可能会很奇怪,但它会帮助我们弄清这个模式及相关概念。我们的目标是添加将不同来源的信息存储到磁盘文件上的功能。所以,第一步我们定义一个接口,并实现它。IMessageWriter和IMessageReader接口分别用于写入和读取信息,他们的实现如下:
以下是代码片段: interface IMessageWriter { string Message { set; } void WriteMessage(string filePath); } class MessageWriter : IMessageWriter { private string message; public string Message { set{message =value;} } public virtual void WriteMessage(string filePath) { File.WriteAllText(filePath, message); } } interface IMessageReader { string ReadMessage(string filePath); } class MessageReader : IMessageReader { public virtual string ReadMessage(string filePath) { if (File.Exists(filePath)) return File.ReadAllText(filePath); return null; } } |
信息作为Message属性存储,MessageWriter的方法WriteMessage把它写到指定的文件。同样,MessageReader的方法ReadMessage从指定的文件读取,并以字符串的形式返回。现在假设客户提出了新需求。
对某些信息在读和写文件之前,我们需要验证用户;
对某些信息我们希望加密后保存,来防止别人读取,并且我们需要以64位编码保存加密信息;
对某些信息,我们都需要这些功能;
很奇怪吧,呵呵,首先我们不用装饰器分析不同的解决方案,这会使我们对这个简单的设计模式认识更加清晰。
- 默认分类(20)
- J2EE(25)
- Java(56)
- PHP(55)
- SEO(10)
- 网页设计(20)
- 网站建设(37)
- 数据库(7)
- JavaScript(17)
- JQuery(6)
- MySQL(20)
- SQL Server(6)
- Access(1)
- Oracle(6)
- office(6)
- Dreamweaver(4)
- Photoshop(12)
- Flash(9)
- Fireworks(13)
- CSS(14)
- HTML(4)
- .NET(7)
- ASP(2)
- DB2(1)
- Ajax(2)
- Linux(12)
- Struts(7)
- Hibernate(8)
- Spring(2)
- Jsp(22)
- Asp(8)
- C#(3)
- C++(1)
- 网络安全(5)
- 软件工程(7)
- XML(1)
- English(2)
- 计算机等级考试(2)
- 计算机病毒(4)
- 个人日志(76)
- 互联网(15)
- ActionScript(10)
- Android(3)
- 数据结构与算法(1)
- 游戏策略(3)
- 美文翻译(2)
- 编程开发(19)
- 计算机应用(4)
- 计算机(10)
- Unity3d(6)
- 其他(1)
- egret(1)