java delegate模式_java的delegate实现

一贯用c#用习惯了,这下回来用java编码,少了委托,还有丢丢不习惯.

于是尝试在java中来实现一个.也应该不完全算委托,主要是为了完成类似的事情.

c#中的委托:

class A:

// 定义一个委托的样式

public delegate void ADelegate(paramList);

// 实例一个委托

public ADelegate OnSomethingHappend;

// 当事件发生的时候 调用所有的委托

OnSomethingHappend?.invoke(parmList);

class B:

// 增加一个委托 local fun的传入参数要和class a中定义的委托的参数保持一直

AInstace.OnSomethingHappend += new ADelegate(local fun);

java:

java 就没有delegate 这个字段了,所以要实现,得靠自己.不过也不是很复杂就是了.

首先定义一个interface

// 观察者

public interface IConnectEventObserver

{

// 接受到一个包

public void OnRecvANetworkPacket(ConnectPacket packet);

}

然后定义一个虚类,在里面定义通知对象

// 通知者

public abstract class ConnectEventINotifier {

protected ArrayList observerList = new ArrayList();

/**

* 新增一个observer

* @param observer 添加的观察者

* @return 是否添加成功/新添加

*/

public boolean AddObserver(IConnectEventObserver observer){

if(observer == null)

{

throw new NullPointerException();

}

if( observerList.indexOf(observer)>= 0){

// 重复添加观察者

return false;

}

observerList.add(observer);

return true;

}

/**

* 删除一个observerList

* @param observer

* @return 是否删除成功,如果失败,代表这个观察者并没有注册

*/

public boolean RemoveObserver(IConnectEventObserver observer){

if(observer == null){

throw new NullPointerException();

}

int observerIndex = observerList.indexOf(observer);

if( observerIndex>= 0){

observerList.remove(observerIndex);

return true;

}

return false;

}

/**

* 通知所有观察者

* @param packet

* @return

*/

protected boolean NotifyAllObserver(ConnectPacket packet){

for(IConnectEventObserver observer : observerList) {

observer.OnRecvANetworkPacket(packet);

}

return true;

}

}

接着,发送通知的类extends ConnectEventINotifier ,然后在需要通知的时候 调用NotifyAllObserver.

要接受通知的类 就实现接口IConnectEventObserver 然后调用上面要发送通知的实例的AddObserver 注册自己就好

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值