1.说明
namespace VisitorsPattern
{
/*访问者模式:有个操作状态,作用于某个对象结构中的各个元素,
* 此模式可以在不改变各个类的情况下去实施操作
*/
/// <summary>
/// 用于获取对象状态
/// </summary>
public abstract class Action
{
public abstract void GetRedChessState(RedChess redChess);
public abstract void GetBlackChessState(BlackChess blackChess);
}
/// <summary>
/// 象棋类
/// </summary>
public abstract class Chess
{
public abstract void GetAction(Action action);
}
public class RedChess : Chess
{
public override void GetAction(Action action)
{
action.GetRedChessState(this);
}
}
public class BlackChess : Chess
{
public override void GetAction(Action action)
{
action.GetBlackChessState(this);
}
}
/// <summary>
/// 在赢的情况下的状态
/// </summary>
public class Win : Action
{
public override void GetRedChessState(RedChess redChess)
{
Console.WriteLine("{0} {1}", redChess.GetType().Name,this.GetType().Name);
}
public override void GetBlackChessState(BlackChess blackChess)
{
Console.WriteLine("{0} {1}", blackChess.GetType().Name, this.GetType().Name);
}
}
/// <summary>
/// 在输的情况下的状态
/// </summary>
public class Lose : Action
{
public override void GetRedChessState(RedChess redChess)
{
Console.WriteLine("{0} {1}", redChess.GetType().Name, this.GetType().Name);
}
public override void GetBlackChessState(BlackChess blackChess)
{
Console.WriteLine("{0} {1}", blackChess.GetType().Name, this.GetType().Name);
}
}
/// <summary>
/// 对象结构:用于集中管理各个对象,并实施对其影响
/// </summary>
public class ObjectStructure
{
private IList<Chess> chessList = new List<Chess>();
public void Add(Chess chess)
{
chessList.Add(chess);
}
public void Remove(Chess chess)
{
chessList.Remove(chess);
}
public void DisPlay(Action action)
{
foreach (var tmp in chessList)
tmp.GetAction(action);
}
}
}
2.调用
static void Main(string[] args)
{
ObjectStructure o = new ObjectStructure();
o.Add(new RedChess());
o.Add(new BlackChess());
Win w = new Win();
o.DisPlay(w);
}