访问者模式

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);
        }

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值