2

私は C# / Java のバックグラウンドから iOS を始めたばかりです。委任パターンとその重要性について説明している記事を読みました。作業を開始すると、実際にはインターフェイスを設計し、定義されたメソッドを使用してデータを渡すだけであることに気付きました。その発言は本当ですか?.net や Java を知っている iOS の達人にとって、委譲パターンは単なるインターフェース設計であり、メソッドを使用してそのインターフェースを実装するクラス間でデータをやり取りするだけだと言えますか? それとも、Objective C の動的な性質のために、他の強力な側面を見落としているのでしょうか。

4

1 に答える 1

3

委任は、インターフェイスの設計とは異なります。

Java と C# のインターフェイスは、メソッド宣言のコレクションです。インターフェースは一種のクラス (つまり型) であり、他のクラスが実装する可能性があります。クラスがインターフェイスを実装する場合、それはインターフェイスによって宣言されたすべてのメソッドを実装することを意味します。

インターフェイスを使用したプログラミングの価値は、具体的なクラス階層を共有することなく、そのインターフェイスを実装するオブジェクトを受け入れるメソッドを作成できることです。

オブジェクト指向プログラミングで発生する典型的な問題は、オブジェクトのいくつかの単純なプロパティのみに依存して、完全に抽象的な方法で他の操作に関して操作を定義する方法です。たとえば、2 つのオブジェクトを比較してそれらの順序を確認する compareTo メソッドを提供する任意のオブジェクトで機能する並べ替えアルゴリズムを実装したい場合があります。インターフェイスがなければ、すべてのオブジェクト タイプで機能する並べ替えアルゴリズムしか作成できません。共通のスーパークラスの子孫。インターフェイスを使用すると、ソート可能にしたい各クラスがSortable単一のメソッドを宣言するインターフェイスを実装するだけで十分ですcompareTo(たとえば)。

インターフェイスは他の多くの方法で使用できますが、基本的に提供されるのは、「コントラクト」に基づくより柔軟なプログラミング スタイルです。

委任は、より具体的なものを指します。委譲は、サブクラス化せずに既存のクラス (またはクラスのセット) のバリアントであるクラスを提供する必要がある場合に役立ちます。委譲 (別名、委譲パターン) では、既存のクラス (デリゲート) のインスタンスを保持する新しいクラスを作成し、デリゲート (デリゲート) を呼び出すだけでほとんどのメソッドを実装します。典型的な例は、サービスのキャッシング実装です。元のサービスがオフになり、一部のデータを取得します (メソッドがあるとしましょうfetch)。これにはコストがかかる場合があります。したがって、これをキャッシュしたいと思います。デリゲートは元のサービスとキャッシュを格納するだけです。そのfetchメソッドを呼び出すと、キャッシュがチェックされ、キャッシュが見つからない場合にのみデリゲートのサービスが呼び出されます。fetch. キャッシュの実装がデリゲートと同じインターフェイスを実装している限り、それを代わりに使用できます。

したがって、委譲が厳密なクラス階層の外側にあるプログラミングのメカニズムを提供するという意味で、インターフェースの考え方といくつかの共通点があり、インターフェースの使用によって (大部分) 可能になりますが、インターフェースには他にも多くの用途があります。同じように。

于 2013-01-29T03:14:09.960 に答える