设计模式

一、备忘录模式(Memento Pattern)
动机(Motivation)
在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。
意图(Intent)
给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。
结构图
+---------------------+
| Context |
| |
| - memento: Memento |
| + createMemento(): Memento |
| + restoreMemento(Memento) |
+---------------------+
^
|
+---------------------+
| Memento |
| |
| - state: String |
+---------------------+
实现代码示例
public class Originator
{
private string _state;
public string State
{
get { return _state; }
set
{
_state = value;
Console.WriteLine("State: " + _state);
}
}
public Memento SaveStateToMemento()
{
return new Memento(_state);
}
public void GetStateFromMemento(Memento memento)
{
State = memento.State;
}
}
public class Memento
{
private string _state;
public Memento(string state)
{
this._state = state;
}
public string State
{
get { return _state; }
}
}
二、解释器模式(Interpreter Pattern)
动机(Motivation)
在软件构建过程中,如果某一特定领域的问题比较复杂,类似的模式不断重复出现,如果使用普通的编程方式来实现将面临非常频繁的变化。在这种情况下,将特定领域的问题表达为某种语法规则下的句子,然后构建一个解释器来解释这样的句子,从而达到解决问题的目的。
意图(Intent)
给定一个语言,定义它的文法的一种表示,并定义一种解释器,这个解释器使用该表示来解释语言中的句子。
结构图
+---------------------+
| Context |
| |
| - memento: Memento |
| + createMemento(): Memento |
| + restoreMemento(Memento) |
+---------------------+
^
|
+---------------------+
| Memento |
| |
| - state: String |
+---------------------+
实现代码示例
public abstract class AbstractExpression
{
public abstract void Interpret(Context context);
}
public class TerminalExpression : AbstractExpression
{
private string data;
public TerminalExpression(string data)
{
this.data = data;
}
public override void Interpret(Context context)
{
if (context.Input.Contains(data))
{
Console.WriteLine("Found: " + data);
}
}
}
public class Context
{
public string Input { get; set; }
}
三、总结
C#版本23种面向对象的设计模式,终于写完了。今天是一个总结性的文章。各个模式都列了出来,每个模式的【动机】、【意图】和【结构图】也写了出来,可以方便大家查看。重新自己写了一遍,感觉很多都不一样了。理解更深刻了,学无止境,继续前进吧。