java delegate是什么,让我们一起了解一下?
delegate是一种设计模式,即一个对象不能完成的事情,委托另一个对象帮其完成,delegate定义代理为属性时,使用weak修饰,避免造成对象的循环引用,引起内存泄露。
如何在java中定义delegate代理?
在java中定义delegate代理需要进行实现的方式。代码示例如下:
- (void)orderTickerForMe { NSLog(@"叫人帮我订票"); if (self.tickerDelegate && [self.tickerDelegate respondsToSelector:@selector(orderTicker)]) { [self.tickerDelegate orderTicker]; } }
- (void)getTickerForMe { NSLog(@"叫人帮我取票"); if (self.tickerDelegate && [self.tickerDelegate respondsToSelector:@selector(getTicker)]) { [self.tickerDelegate getTicker]; } }
那我们在使用时应该注意什么?
1、导入该对象的头文件。
2、实例化该对象。
3、设置该对象的代理。
4、添加该对象的协议。
5、实现该对象的代理方法。
实战操作:
因为在java中就没有delegate这个字段了,所以要实现,不过也不是很复杂。
1、首先定义一个interface
// 观察者 public interface IConnectEventObserver { // 接受到一个包 public void OnRecvANetworkPacket(ConnectPacket packet); }
2、然后定义一个虚类,在里面定义通知对象。
// 通知者 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; } }
以上就是小编今天的分享了,希望可以帮助到大家。