java delegate
- IT科技
- 关注:1.08W次
<link rel="stylesheet" href="https://js.how234.com/third-party/SyntaxHighlighter/shCoreDefault.css" type="text/css" /><script type="text/javascript" src="https://js.how234.com/third-party/SyntaxHighlighter/shCore.js"></script><script type="text/javascript"> SyntaxHighlighter.all(); </script>
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;}}
- 文章版权属于文章作者所有,转载请注明 https://dongkepu.com/itkeji/egqvom.html