如何剥离具体动作的具体实现 (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 );
        }
    }
}

posted @ 2008-07-10 16:12  RicoRui  阅读(1922)  评论(5编辑  收藏  举报