• 如何剥离具体动作的具体实现 (Event +=)


         

           如何剥离具体动作的具体实现,怎么说呢,比如:一个人在路上散步,此时遇到朋友时,你会对其说:hello;如果遇到车辆时,你会及时让开它,以免受伤。。
    从技术角度来说:
           Client即是一个场景
           Action即是具体执行动作的
           FailedEventArgs即是自定义的事件类
           CustomerEventProvider即是一个事件提供者
    此code的另一个好处:扩展性还是比较不错。如果要处理要的动作时,只需要更改"具体的实现"即可。
    其实如果动作多的话,用Command模式,或者你认为可以的模式都是可以。反正具体情况具体调配吧,
    此程序:我使用定义事件的方式,来剥离具体动作的具体实现。Come on Beat!

                                                                                                                                            By Caviare , BrianLei

    程序如下:

    ////调用处

              new Client( "Car" );

    ///

    public class Client
    {
        CustomerEventProvider cep;

        public Client ( String fallAcross ) {
            cep = new CustomerEventProvider();
           ///当其散步之前,预先定义几个事件(即动作),遇到情况时自动去执行具体的动作,给于反应。
            cep.OnFailed += new CustomerEventProvider.FailedHandler( Action.Failed );
            cep.OnSuccess += new CustomerEventProvider.SuccessHandler( Action.Success );
            Walk( fallAcross );
        }

        public void Walk ( String fallAcross ) {
           
    ///这里写的几点粗糙,这里可以用具体的模式,弃用if,else.
            ///我在这里就不写。反正就是提供一个思路
            if ( fallAcross.Equals( "People" ) ) {
                cep.ShowSuccess( this , new EventArgs() );
            }
            else {
                FailedEventArgs fea = new FailedEventArgs();
                cep.ShowFailed( this , fea );
            }
        }
    }

    /// <summary>
    /// 具体执行动作的类,具体实现可以在这里规化。
    /// </summary>
    public class Action
    {
        public static void Success ( Object Sender , EventArgs e ) {
            Console.WriteLine( "Success" );
        }

        public static void Failed ( Object Sender , FailedEventArgs e ) {
            e.EventMessage = "Failed";
            Console.WriteLine( e.EventMessage );
        }
    }

    /// <summary>
    ///
    自定义事件类
    /// 用于:定义一些EventCode,Message Etc.
    /// </summary>
    public class FailedEventArgs : EventArgs
    {
        private String eventCode;

        public String EventCode {
            get { return eventCode; }
            set { eventCode = value; }
        }

        private String eventMessage;

        public String EventMessage {
            get { return eventMessage; }
            set { eventMessage = value; }
        }
    }

    /// <summary>
    ///
    事件提供者,定义各种的动作
    /// </summary>
    public class CustomerEventProvider
    {
        public delegate void FailedHandler ( object sender , FailedEventArgs e );

        public event FailedHandler OnFailed;
        public void ShowFailed ( object sender , FailedEventArgs e ) {
            if ( OnFailed != null ) {
                OnFailed( sender , e );
            }
        }

        public delegate void SuccessHandler ( object sender , EventArgs e );

        public event SuccessHandler OnSuccess;
        public void ShowSuccess ( object sender , EventArgs e ) {
            if ( OnSuccess != null ) {
                OnSuccess( sender , e );
            }
        }
    }

  • 相关阅读:
    bzoj1455-罗马游戏
    bzoj1206-[HNOI2005]虚拟内存
    bzoj2762-[JLOI2011]不等式组
    bzoj2729-[HNOI2012]排队
    [模板] 高精度加/减/乘
    bzoj1013-[JSOI2008]球形空间产生器
    bzoj1002-[FJOI2007]轮状病毒
    什么是Redis缓存穿透、缓存雪崩和缓存击穿
    CentOS 7 中英文桌面安装步骤详细图解
    Redis数据操作
  • 原文地址:https://www.cnblogs.com/RuiLei/p/1240091.html
Copyright © 2020-2023  润新知