您的位置:首页 > 其它

《大话设计模式》学习笔记24:访问者模式

2015-06-04 14:31 507 查看
  


  


男人女人对比示例:

  


1.Visitor:

public abstract class Action
{
public abstract void GetManConclusion(Man man);
public abstract void GetWomanConclusion(Woman woman);
}


2.Element:

public abstract class Person
{
public abstract void Accept(Action visitor);
}


3.ConcreteVisitor(以Success类为例):

public class Success:Action
{
public override void GetManConclusion(Man man)
{
Console.WriteLine("{0} {1}时,背后多半有一个伟大的女人。", man.GetType().Name, this.GetType().Name);
}

public override void GetWomanConclusion(Woman woman)
{
Console.WriteLine("{0} {1}时,背后大多有一个不成功的男人。", woman.GetType().Name, this.GetType().Name);
}
}


4.ConcreteElement(以Man类为例):

public class Man:Person
{
public override void Accept(Action visitor)
{
visitor.GetManConclusion(this);
}
}


5.ObjectStructure:

public class ObjectStructure
{
private IList<Person> elements = new List<Person>();

public void Attach(Person element)
{
elements.Add(element);
}
public void Detach(Person element)
{
elements.Remove(element);
}
public void Display(Action visitor)
{
foreach(var e in elements)
{
e.Accept(visitor);
}
}
}


6.客户段代码:

class Program
{
static void Main(string[] args)
{
ObjectStructure objectStructure = new ObjectStructure();
objectStructure.Attach(new Man());
objectStructure.Attach(new Woman());

Action success = new Success();
objectStructure.Display(success);

Action failing = new Failing();
objectStructure.Display(failing);
}
}


  访问者模式适用于数据结构相对稳定的系统,它把数据结构和作用于结构上的操作之间的耦合分离,使得操作集合可以相对自由地演化。如果系统有比较稳定的数据结构,又有易于变化的算法,使用访问者模式是比较合适的,因为访问者模式使得算法操作的增加变得容易。

  优点:增加新的操作很容易,因为增加新的操作就意味着增加一个新的访问者。访问者模式将有关的行为集中到一个访问者对象中。

  缺点:使增加新的数据结构变得困难。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: