Objective C/Swift 的 portocol 其實就是 Java 的 interfaces.

portocal / Delegate 其實就是在實作 interfaces, 幾乎沒有不同

 

但有趣的是,其中的差異並非在設計的差異,而在實作的差異,

iOS 設計是以物件代理人為單位設計,以一個清單為例,是在 UITableView 設計一組 各式協議,然後以 class 種類宣告協議,稱作代理人(Delegate)

https://developer.apple.com/reference/uikit/uitableviewdelegate?language=objc

作法是建立好實體,再指定代理人,有必要就實作接口方法



Android 設計是以行為當作設計單位,同樣的清單,若要作按下等協議,你要宣告的是 Impelements onClickListener,  https://developer.android.com/reference/android/widget/AdapterView.html#setOnClickListener(android.view.View.OnClickListener)

https://developer.android.com/reference/android/widget/ListView.html

建好實作方法,然後在 ListView 設定 onClickListener

 

所以會有以下差別:

1. iOS 且很少用到 formal protocol 也就是一定要實作的協議,大部份是不用實作的,所以設計時,就會設計非常多的 portocol, 以 listview 為例,有十個接口,全都是非正式接口,大部份都不會實作,但 Android 上,Impelements 通常是 formal protocol 所以有宣告,就一定要實作

2. iOS 上面每個 UIClass 都有自己的 portocol, 所以每個 class 的作法都要各自設定,而 Android 上通常以動作為中心,所以會有多個不同的元作共用一個動作的情形

 

這只是一般性的差異,實作上作法不同也產生了許多不同的用途範圍變化,下次再聊

 

 

arrow
arrow

    shenfive 發表在 痞客邦 留言(1) 人氣()