2009-08-19 19 views
1

私は、互いに大きなコードを共有する複数のクラス(コントローラ)を持っています。このコードをどのように除外できますか?このコードは、プロトコルに属するいくつかのメソッドです。言い換えれば、私のコントローラはすべてこのプロトコルに関して同じように動作しています。彼らはすでにいくつかの異なるコントローラのサブクラスなので、私はそれらを同じ親のサブクラスにすることはできません。Obj-Cのさまざまなクラスでコードを再利用する最良の方法は何ですか?

答えて

3

集約の使用:プロトコルに準拠した単一の再利用可能なクラスを作成し、それに委譲します。

+0

+1 - これは、委任と同じものです。 –

+1

委任は、コントロールの決定を1つの場所またはクラス階層外の何かに集中させたい場合に使用します。疑問が読み取れるように、これは簡単な継承で解決されるように思えます。 – bbum

0

あなたは、一種の多重継承を持っていることが

1

は、あなたの一般的なコントローラクラスのすべてが継承する抽象スーパークラスを作るそれらについては...プロトコルを実装し、いくつかのスーパークラスから「継承」http://developer.apple.com/iphone/library/documentation/Cocoa/Conceptual/ObjCRuntimeGuide/Articles/ocrtForwarding.html会談することができます。その抽象スーパーは必要なプロトコルを実装でき、比較的一般的な、または非常に特殊なサブまたはサブサブクラスがオーバーライドできます。

iPhone SDKのさまざまなビュー/レスポンダーを考えてみましょう。

UIResponderクラスはイベント処理を提供します。

描画機能を追加するためのUIViewサブクラス。

UIControlのサブクラスUIViewは、さまざまなコントロールのような動作を追加します。

UIButton、UITextField、UISliderなどがあります。そのすべてがUIControlのサブクラスで、それぞれの機能を追加しています。

注意深く見れば、NSCoding(およびNSObject)プロトコルは階層内のさまざまなクラスによってサポートされていると宣言され、必要に応じてより特定のサブクラスがオーバーライドされます。

1

カテゴリを共通のスーパークラス(必要に応じてNSObject)に追加します。

関連する問題