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; } }
以上就是小編今天的分享了,希望可以幫助到大家。