Spring系列(3/3)---一个较为完善的模型

上一篇,我们建立了一个可用的模型,但我们也看到了它的不足,下面,我们就来继续完善这个模型:

1、首先,因为委托的目的其实是为了与附加责任类进行交互,而挂接了委托的附加责任类才会收到消息,从这点来看,是一个非常典型的观察者模式应用场景,因此我们觉得引入这个模式,好处是观察注册有专门的类来负责管理,在这里是代理类行使这个责任(后面的模型会转到代理类工厂),二是附加责任类以类的身份参与,而不再是简单的挂接委托,这样做的好处是目标类可以更多的了解附加责任类,可以在需要的时候对观察者身份进行鉴别,虽然少些自由,但多了一份安全。

public interface IMethodExecNotify
    {
        bool SubjectMethodExecuting(INotifyInvocation Invocation);//INotifyInvocation 参数后面会讲。
    }

2、因为我们有7个切入点,我们需要7种接口,当然实际用的时候,可以简化到3-4个,没必要搞这么多。另外一种方法,就是用一个接口,但提供7个登记点(注册方法),或者更为简洁的做法是提供一个接口,注册方法也只有一个,但注册方法增加一个主题类型的参数(在Spring中叫通知类型);

public enum MethodSubjectType
    {
        A,
        B1,
        B2,
        C1,
        C2,
        D,
        E
    }

       //观察者注册
      public void RegisterOberver(IMethodExecNotify Observer,MethodSubjectType)
        {
            //.........
        }

3、这个观察者模式,主题当然是代理类,观察者就是附加责任的类。为了应用这个模式,我们需要对主题和观察者之间的通信做一个约定,也就是需要定义一个接口,这个接口必须包含一个通知方法,主题必须知道这个方法来通知(调用)观察者,而观察者必须实现这个接口,来收取主题发送的消息。一个类实现了这个接口,才能作为观察者注入主题,这从某种意义上来说,就是一种附加责任类的身份鉴别。

 /// <summary>
    /// 代理类,从AClass继承.
    /// </summary>
    public class ProxyAClass1 : AClass
    {
     
        private AClass _target;
        public Dictionary<IMethodExecNotify,MethodSubjectType> _observers = null;
        /// <summary>
        /// 构造函数,需传入目标类实例.
        /// </summary>
        /// <param name="target"></param>
        public ProxyAClass1(object Target)
        {
            _target = Target;
            _observers = new Dictionary<IMethodExecNotify,MethodSubjectType>();
        }
        public void RegisterOberver(IMethodExecNotify Observer,MethodSubjectType)
        {
            //.........
        }
        public void RemoveOberver(IMethodExecNotify Observer)
        {
            //..........
        }

}

 

..............................待续

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值