簡體   English   中英

OBJ-C委托模型-用Java?

[英]Obj-c delegate model - in Java?

我正在用Java編寫一個小型聊天程序。 我得到了一些類,它們的對象必須彼此跟蹤(例如,當用戶要發送消息時,連接偵聽器需要在收到新消息時更新GUI,就像GUI需要寫給連接的編寫器一樣) )。

在Mac OS X上的Cocoa中,我將編寫並實現一個委托模型。 用Java怎么辦? (到目前為止,我在初始化新對象時只是將“ this”作為參數傳遞,以便保留新對象對其的引用。)

在Cocoa / Objective-C中,委托是遵守指定協議的對象。 Java接口類似於Objective-C協議,不同之處在於Java不允許使用可選方法:如果您的類實現了接口,則必須實現所有方法。

如果您對委托的所有方法都很滿意,只需定義一個接口並使用它即可。

如果您的委托接口有很多方法,並且使其中某些方法成為可選方法很方便,則可以定義一個實現委托接口的Adapter類,為每個方法提供默認的實現。 要使用它,您的委托類必須擴展適配器類,或者,如果不可能,則定義一個私有內部類來擴展適配器類。 (有關此示例,請查看Java的MouseListener接口和MouseAdapter類。)

總之,盡管靜態類型檢查將使可選方法的工作量有所增加,但您仍然可以在Java中使用委托模式。

代理不是由Java語言直接提供的; 使用偵聽器模式是標准Java最接近委托的方式。

但是,我已經使用反射在Java中實現了回調/委托支持。 詳細信息和工作源可在我的網站上找到

這個怎么運作

我們有一個名為Callback的主體類,以及一個名為WithParms的嵌套類。 需要回調的API將把Callback對象作為參數,並在必要時創建一個Callback.WithParms作為方法變量。 由於此對象的許多應用程序都是遞歸的,因此可以很干凈地工作。

由於性能仍然是我的重中之重,因此我不需要創建一個一次性對象數組來保存每次調用的參數-畢竟,在大型數據結構中,可能有成千上萬個元素,並且在消息處理中在這種情況下,我們可能每秒處理數千個數據結構。

為了確保線程安全,參數數組必須在API方法的每次調用中唯一存在,並且為了提高效率,應在回調的每次調用中使用相同的數組。 我需要第二個對象,該對象創建起來很便宜,以便將回調與參數數組綁定以進行調用。 但是,在某些情況下,由於其他原因,調用者將已經具有參數數組。 由於這兩個原因,參數數組不屬於Callback對象。 同樣,調用的選擇(將參數作為數組或作為單個對象傳遞)也使用回調在API手中,從而使它能夠使用最適合其內部工作方式的任何調用。

然后,WithParms嵌套類是可選的,有兩個用途,它包含回調調用所需的參數對象數組,並提供10個重載invoke()方法(具有1到10個參數),這些方法將加載參數數組,然后調用回調目標。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM