Net设计模式实例之访问者模式(Visitor Pattern)
来源:互联网 发布:软件可以申请专利 编辑:程序博客网 时间:2024/05/19 23:28
一、访问者模式简介(Brief Introduction)
表示一个作用于某对象结构中的元素操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作,它把数据结构和作用于结构上的操作之间的耦合性解脱开,使的操作结合可以相对自由地演化。优点是增加新的操作很容易,因为增加一个新的操作就意味着增加一个新的访问者,访问者模式将有关的行为集中到一个访问对象中。
二、解决的问题(What To Solve)
访问者模式的目的是要把处理从数据结构分离出来。如果系统有比较稳定的数据结构,又有易于变化的算法的话,使用访问者模式是个不错的选择,因为访问者模式使的算法操作的增加变的容易。相反,如果系统的数据结构不稳定,易于变化,则此系统就不适合使用访问者模式了。
三、访问者模式分析(Analysis)
1、访问者模式结构
Visitor:为对象结构中Element的每一个子类声明一个Visitor操作。
ConcreteVisitor1、ConcreteVisitor2:具体的访问者,实现父类Visitor的操作。每个操作实现算法的一部分,而该算法片段仍是对应与结构中对象的类。
ObjectStructure:枚举它的元素,可以提供一个高层的接口以允许访问者访问它的元素。
Element:定义一个Accept操作,它以一个访问者为参数。
ConcreteElementA、ConcreteElementB: 具体元素,实现父类Element的方法Accept。
2、源代码
1、访问者抽象类Visitor
public abstract class Visitor
{
public abstract void VisitConcreteElementA(ConcreteElementAconcreteElementA);
public abstract void VisitConcreteElementB(ConcreteElementBconcreteElementB);
}
2、具体访问者ConcreteVisitor1、ConcreteVisitor2
public class ConcreteVisitor1 : Visitor
{
public override void VisitConcreteElementA(ConcreteElementAconcreteElementA)
{
Console.WriteLine("{0}访问{1}",this.GetType().Name,concreteElementA.GetType().Name);
}
public override void VisitConcreteElementB(ConcreteElementBconcreteElementB)
{
Console.WriteLine("{0}访问{1}", this.GetType().Name, concreteElementB.GetType().Name);
}
}
public class ConcreteVisitor2 : Visitor
{
public override void VisitConcreteElementA(ConcreteElementAconcreteElementA)
{
Console.WriteLine("{0}访问{1}", this.GetType().Name, concreteElementA.GetType().Name);
}
public override void VisitConcreteElementB(ConcreteElementBconcreteElementB)
{
Console.WriteLine("{0}访问{1}", this.GetType().Name, concreteElementB.GetType().Name);
}
3、定义一个Accept操作,它以一个访问者为参数
public abstract class Element
{
public abstract void Accept(Visitor visitor);
}
4、具体元素ConcreteElementA、ConcreteElementB
public class ConcreteElementA : Element
{
public override void Accept(Visitor visitor)
{
visitor.VisitConcreteElementA(this);
}
public void OperationA()
{
}
}
public class ConcreteElementB : Element
{
public override void Accept(Visitor visitor)
{
visitor.VisitConcreteElementB(this);
}
public void OperationB()
{
}
}
5、对象结构ObjectStructure
public class ObjectStructure
{
IList<Element> elements=new List<Element>();
public void Add(Element e)
{
elements.Add(e);
}
public void Remove(Element e)
{
elements.Remove(e);
}
public void Accept(Visitor visitor)
{
foreach (Element e in elements)
{
e.Accept(visitor);
}
}
}
5、客户端代码
static void Main(string[] args)
{
ObjectStructure os = new ObjectStructure();
os.Add(new ConcreteElementA());
os.Add(new ConcreteElementB());
ConcreteVisitor1 cv1 = new ConcreteVisitor1();
ConcreteVisitor2 cv2 = new ConcreteVisitor2();
os.Accept(cv1);
os.Accept(cv2);
Console.Read();
}
3、程序运行结果
四、总结(Summary)
访问者模式表示一个作用于某对象结构中的个元素操作。它使你可以在不改变各元素类的前提下定义作用于这些元素的新操作. 访问者模式的目的是要把处理从数据结构分离出来
- Net设计模式实例之访问者模式(Visitor Pattern)
- 设计模式之访问者模式(Visitor Pattern)
- 设计模式之访问者模式--- Pattern Visitor
- .NET设计模式(24):访问者模式(Visitor Pattern)
- 【设计模式】访问者模式(Visitor Pattern)
- 设计模式之十五:访问者模式(Visitor Pattern)
- 设计模式总结之Visitor Pattern(访问者模式)
- 【23种设计模式】之 访问者模式(Visitor Pattern )
- Visitor Pattern(访问者模式)
- 访问者模式(Visitor Pattern)
- 访问者模式(Visitor Pattern)
- 设计模式之-访问者模式(Visitor Design Pattern)
- JAVA设计模式之 访问者模式【Visitor Pattern】
- 设计模式(行为型)之访问者模式(Visitor Pattern)
- 设计模式之访问者模式(visitor)
- 设计模式之访问者模式(Visitor)
- 设计模式18:Visitor Pattern (访问者模式)
- [设计模式]访问者模式(visitor pattern)
- 浏览器下载导出excel
- html-meta name="viewport" content="width=device-width,initial-scale=1.0" 解释
- ABAP生成二维码,smartforms生成二维码
- (android studio)Building "xx项目" Gradle project info 卡死
- 用PowerDesigner从oracle数据库导出word格式文档
- Net设计模式实例之访问者模式(Visitor Pattern)
- JDK 1.8 ArrayList源码分析
- Postgresql修改字段的长度
- ubuntu16.04为知笔记的安装
- WLST 命令和变量参考
- JavaWeb总结九、 验证码
- Net设计模式实例之模板方法模式(Template Mothed Pattern)
- java中如何让一个子类不能调用从父类继承的方法
- 流程图怎么画