開心生活站

位置:首頁 > IT科技 > 

java,delegate

IT科技9.64K

<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

實戰操作:

因爲在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;}}

標籤:delegate java