簡體   English   中英

Objective-C:如何在運行時決定實現

[英]Objective-C: How to decide implementation at runtime

我正在開發需要解析MSR卡數據以查找特定用戶ID類型的數字的應用程序。 對於不同的客戶端,解析的細節將有所不同。 理想情況下,我想編寫實現相同接口的單獨類,並選擇在運行時使用哪個類。 也有一個Web組件,因此在PHP中我創建了一個接口,然后實現了一個不同的類,然后根據配置值選擇要實例化的接口。 在Objective-C中執行此操作的正確方法是什么?

我從協議開始,但無法弄清楚如何設置調用代碼應使用哪種實現。 我需要導入所有實現類,然后編寫一個開關嗎? 似乎應該有一個更簡單的方法。

謝謝

協議方法是一種很好的方法。 您在協議中定義接口,然后使用不同的具體類來實現它。 然后,您將擁有一個靜態方法,該方法將決定使用哪個方法並將其返回,但是調用者不知道具體類型,僅知道它實現了您的協議​​,因為返回類型是協議。

這樣,所有決定使用哪個類的邏輯以及不同具體類的所有知識都封裝在此單個工廠方法中,並且調用代碼只說:

// MSRParser is the protocol defining the interface.
// MSRParserHelper is a class with a class method (+)
MSRParser parser = [MSRParserHelper parserForCard:aCard];
[parser doParserThings];

因此,您看到它不需要知道類是什么,只需要知道它符合協議即可。

暫無
暫無

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

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