zoukankan      html  css  js  c++  java
  • 如何剥离具体动作的具体实现 (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 );
            }
        }
    }

  • 相关阅读:
    POJ 2175 Evacuation Plan 费用流 负圈定理
    POJ 2983 Is the Information Reliable? 差分约束
    codeforces 420B Online Meeting
    POJ 3181 Dollar Dayz DP
    POJ Ant Counting DP
    POJ 1742 Coins DP 01背包
    中国儒学史
    产品思维30讲
    Java多线程编程核心技术
    编写高质量代码:改善Java程序的151个建议
  • 原文地址:https://www.cnblogs.com/RuiLei/p/1240091.html
Copyright © 2011-2022 走看看