帮你整理了一份设计模式速查手册 (9)

调用时像下面这样

Receiver r = new Receiver();
Command c = new ConcreteCommand(r);
Invoker i = new Invoker();
i.SetCommand(c);
i.ExecuteCommand();

命令模式可以比较容易设计成命令队列,方便记录日志,支持撤销重做

5、Iterator 迭代器

迭代器提供一种方法顺序访问一个聚合对象中各个元素,而又不暴露该对象的内部表示。就是把元素之间的遍历游走的责任交给迭代器,而不是集合对象本身,分离了集合对象的遍历行为,这样不暴露集合内部结构,又可让外部访问集合内部数据。

帮你整理了一份设计模式速查手册

核心就是定义一个有Next,CurrentItem等方法的Iterator迭代接口,然后在子类具体迭代器ConcreateIterator类(可以实现多个迭代方式)中定义一个具体的聚集对象,然后遍历迭代器的Next方法遍历聚集对象内部数据。

在dotNET框架中已经准备好了相关接口,只需要去实现去就好。
IEumerator支持对非泛型集合的简单迭代接口,就和上面Iterator一样

public interface IEnumerator
{
    object? Current { get; }
    bool MoveNext();
    void Reset();
}

常用的foeach遍历,编译器也是转化为了IEnumerator遍历。因为太常用,高级语言都进行了封装,自己也就不常用了。

6、Mediator 中介者

中介者模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。就是提供一个中介类,处理不同类之间的通信。

帮你整理了一份设计模式速查手册

面向抽象编程要求我们类应该依赖于抽象

核心就是定义中介者关联不同的需要通信的类,通信类内部也需要关联具体中介者。通信类发送信息时实际已经通过中介者来转发。

我们看下核心的具体中介者和通信者以及客户端调用实例

帮你整理了一份设计模式速查手册

帮你整理了一份设计模式速查手册

 

 

帮你整理了一份设计模式速查手册

中介者模式将原来网状的结构变成星状结构,所以中介者可能会很庞大。一般应用在一组对象已定义良好但是复杂的方式进行通信的场合。

7、Memento备忘录

备忘录模式保存一个对象的某个状态,以便在适当的时候恢复对象。很多时候我们需要记录一个对象的内部状态,这样可以让用户去恢复。像玩魔塔游戏存进度一样。

帮你整理了一份设计模式速查手册

结构图中Originator发起人负责创建一个备忘录,保存备忘录的内部数据。Memento备忘录包含要备份的数据,Caretaker管理者得到或设置备忘录。

帮你整理了一份设计模式速查手册

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/wpdydg.html