iLeichun

当前位置: 首页 > .NET

.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位编码保存加密信息;

  对某些信息,我们都需要这些功能;

  很奇怪吧,呵呵,首先我们不用装饰器分析不同的解决方案,这会使我们对这个简单的设计模式认识更加清晰。

更多