C#面向对象模式设计第二十四讲:Visitor 观察者模式(行为型模式)

(根据MSDN WebCast相关课程整理)

类层次结构中可能经常由于引入新的操作(虚方法),从而将类型变得脆弱。

如下图是一幅类继承关系的层次结构图,

C#面向对象模式设计第二十四讲:Visitor 观察者模式(行为型模式)_第1张图片

如果在父类中直接增加一个虚方法时,所有的子类都可能需要改变。如何在不改变类层次与结构的前提下,在运行为根据需要透明的为各个类添加新的方法与操作。

GoF:表示一个作用于某种对象结构中的各元素的操作。它可以不改变各元素的类的前提下,定义作用于这些元素的新的操作。

C#面向对象模式设计第二十四讲:Visitor 观察者模式(行为型模式)_第2张图片

没有采用Visitor模式时:

C#面向对象模式设计第二十四讲:Visitor 观察者模式(行为型模式)_第3张图片

应用Visitor模式,需要在父类中事先准备好一个方法,以便接收事后添加的新操作,并提供一个Visitor类,这个类中包括父类的所有子类的相应操作。

C#面向对象模式设计第二十四讲:Visitor 观察者模式(行为型模式)_第4张图片

在父类的各子类中,实现事先准备好的方法,如下:

C#面向对象模式设计第二十四讲:Visitor 观察者模式(行为型模式)_第5张图片

前是预先准备好的父类及其子类应该具体的条件,以下开始自己添加新的操作。

在MyVisitor中具体实现要添加的操作:

C#面向对象模式设计第二十四讲:Visitor 观察者模式(行为型模式)_第6张图片

将新添加的操作和父类关联:

C#面向对象模式设计第二十四讲:Visitor 观察者模式(行为型模式)_第7张图片

具体调用的方式与步骤:

C#面向对象模式设计第二十四讲:Visitor 观察者模式(行为型模式)_第8张图片

C#中的扩展方法功能就是Visitor模式的典型应用。

<完>

你可能感兴趣的:(C#面向对象模式设计第二十四讲:Visitor 观察者模式(行为型模式))