java的委托代理模式(一)---接口模式

2018-11-01  本文已影响0人  蘑菇Ai布丁

今天,我们来模拟一个应用场景

控制层类:CollectInfoCenter 

组件类:HrPanel

HrPanel是一个公共组件类,我们现在需要里面有一个位置需要运行CollectInfoCenter 里的一个方法。除非把CollectInfoCenter 这个方法赋值给HrPanel里面的一个空的方法体,可是在java里面是没有这个模式的!那怎么办呢?这里我用一个接口作为中间过渡,来实现这个委托代理。

中间接口类:IPanelBeforeEditorCreate

public interface IPanelBeforeEditorCreate {

public void  _panel_BeforeEditorCreate()throws Exception;

}

在HrPanel中把这个接口当做属性,并且调用这个接口中方法,我们这里假设一次会有多个接口实例

public class HrPanel {

public List<IPanelBeforeEditorCreate> panelBeforeEditorCreates = new ArrayList<>();

//***

// --------------------

// 调用自定义事件的,接口实现过程开始

// *****/

public void add(IPanelBeforeEditorCreate iPanelBeforeEditorCreate){

this.panelBeforeEditorCreates.add(iPanelBeforeEditorCreate);

}

public void remove(IPanelBeforeEditorCreate iPanelBeforeEditorCreate) {

this.panelBeforeEditorCreates.remove(iPanelBeforeEditorCreate);

}

public void notifyListeners()throws Exception{

Iterator iter =this.panelBeforeEditorCreates.iterator();

while (iter.hasNext()) {

IPanelBeforeEditorCreate listener = (IPanelBeforeEditorCreate) iter.next();

listener._panel_BeforeEditorCreate();

}

}

//***

// 调用自定义事件的,反射机制实现过程结束

// --------------------

// *****/

}

// 在这里需要调用外部controller的方法

public  void dothis() {

this.notifyListeners();

}

这样组件内部的就写完了,我们开始controller里面的调用,收先我们需要实现这个接口,并且实现接口中的方法,在需要调用的地方我们需要写上

public class CollectInfoCenter    implements   IPanelBeforeEditorCreate{

    public Object GetCollectInfo()

    {

    HrPanel     _panel   =   new   HrPanel();

    _panel.add(this);

    return _panel.dothis();

    }

    @Override

    public void _panel_BeforeEditorCreate(){

    System.out.println("--------------------------------");

    System.out.println("调用了 CollectInfoCenter 自定义panel事件");

    System.out.println("--------------------------------");

    }

}

这样,在hrpanel里面调用dothis的时候,你会发现控制台上输出了

--------------------------------

调用了 CollectInfoCenter 自定义panel事件

--------------------------------

OK,这里我们就实现了像C#中一样的委托事件模式,所有的类只需要实现了我们定义的中间接口,就可以在dothis里面执行自定义的东西,是不是很nice!!!

当然了,如果你觉得写接口比较麻烦的话!那下一章节我们就来看看另外一种比较简单的处理模式(反射机制)

上一篇下一篇

猜你喜欢

热点阅读