访问者模式
来源:互联网 发布:淘宝店铺经营地址海外 编辑:程序博客网 时间:2024/05/02 00:15
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);
}
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 访问者模式
- 中介者模式
- delphi中的窗体移动
- 为程序员量身定制的12个目标
- How Do Windows NT System Calls REALLY Work?
- 学习Oracle动态性能表-(8)-V$SESSION_WAIT,V$SESSION_EVENT
- 访问者模式
- System Call Optimization with the SYSENTER Instruction
- 蒋祺和陈瑞莲
- 彭宇承认撞了南京老太
- 笔记——c++
- Android自学--一篇文章基本掌握所有的常用View组件
- 对于南京“1·6”抢劫案嫌疑人为什么警方那么肯定是7起抢劫案的同一人作案呢?
- 【程序语言】并行编程——openMP初探
- 在Extjs模块化程序中动态加载js文件