web-dev-qa-db-ja.com

MVC以外のiOSで使用されているデザインパターンは何ですか?

IPhone開発で使用されるMVC以外のデザインパターンについて知る必要があります。

サンプルスニペットまたはコードスニペットを使用して返信してください。

ありがとう。

49
Santosh Gurram

抽象ファクトリー

Abstract Factoryパターンは、具象クラスを指定せずに関連オブジェクトまたは依存オブジェクトのファミリーを作成するためのインターフェースを提供します。クライアントは、工場から取得した具体的なオブジェクトの詳細から切り離されます。

アダプター

アダプタ設計パターンは、クラスのインターフェースをクライアントが期待する別のインターフェースに変換します。アダプタを使用すると、互換性のないインターフェイスが原因でできなかったクラスを連携させることができます。クライアントをターゲットオブジェクトのクラスから分離します。

責任の連鎖

Chain of Responsibility設計パターンは、複数のオブジェクトにリクエストを処理する機会を与えることにより、リクエストの送信者をその受信者から切り離します。このパターンは、受信オブジェクトをチェーンし、オブジェクトがそれを処理するまでチェーンに沿ってリクエストを渡します。チェーン内の各オブジェクトは、リクエストを処理するか、チェーン内の次のオブジェクトに渡します。

コマンド

コマンドデザインパターンは、要求をオブジェクトとしてカプセル化するため、さまざまな要求でクライアントをパラメーター化したり、要求をキューに入れたり、ログに記録したり、取り消し可能な操作をサポートしたりできます。要求オブジェクトは、特定のレシーバーで1つ以上のアクションをバインドします。コマンドパターンは、リクエストを行うオブジェクトと、リクエストを受信して​​実行するオブジェクトを分離します。

複合

複合設計パターンは、関連オブジェクトをツリー構造に構成し、部分的な階層を表します。このパターンにより、クライアントは個々のオブジェクトとオブジェクトの構成を均一に処理できます。 Compositeパターンは、Model-View-Controller集約パターンの一部です。

デコレーター

デコレータデザインパターンは、オブジェクトに追加の責任を動的に付加します。デコレータは、機能を拡張するためのサブクラス化の柔軟な代替手段を提供します。サブクラス化と同様に、デコレータパターンの適応により、既存のコードを変更せずに新しい動作を組み込むことができます。デコレータは、動作を拡張するクラスのオブジェクトをラップします。ラップするオブジェクトと同じインターフェイスを実装し、ラップされたオブジェクトにタスクを委任する前または後に独自の動作を追加します。デコレータパターンは、クラスは拡張に対して開かれ、変更に対しては閉じられるべきであるという設計原則を表現しています。

ファサード

Facade設計パターンは、サブシステム内の一連のインターフェイスへの統合インターフェイスを提供します。このパターンは、複雑さを軽減し、サブシステム間の通信と依存関係を隠すことにより、サブシステムを使いやすくする高レベルのインターフェースを定義します。

イテレータ

Iteratorデザインパターンは、基礎となる表現を公開せずに、集合オブジェクト(つまりコレクション)の要素に順番にアクセスする方法を提供します。 Iteratorパターンは、コレクション自体から反復子オブジェクトへのコレクションの要素へのアクセスと走査の責任を移します。 Iteratorは、コレクション要素にアクセスするためのインターフェースを定義し、現在の要素を追跡します。異なる反復子は、異なるトラバーサルポリシーを実行できます。

メディエーター

Mediatorのデザインパターンは、一連のオブジェクトの相互作用をカプセル化するオブジェクトを定義します。メディエータは、オブジェクトが相互に明示的に参照しないようにすることで疎結合を促進し、相互作用を個別に変更できます。したがって、これらのオブジェクトはより再利用可能なままです。このパターンの「メディエーターオブジェクト」は、システム内のオブジェクト間の複雑な通信および制御ロジックを集中化し、これらのオブジェクトは、メディエーターオブジェクトに状態が変化すると通知し、メディエーターオブジェクトからの要求に応答します。

メメント

Mementoパターンは、カプセル化に違反することなく、オブジェクトの内部状態をキャプチャして外部化し、オブジェクトを後でこの状態に復元できるようにします。 Mementoパターンは、凝集を維持するために、そのオブジェクトの外部にある重要なオブジェクトの重要な状態を保持します。

オブザーバー

Observer設計パターンは、オブジェクト間の1対多の依存関係を定義するため、1つのオブジェクトの状態が変化すると、そのすべての依存関係が自動的に通知および更新されます。 Observerパターンは基本的に、サブジェクトとそのオブザーバーが疎結合されているパブリッシュアンドサブスクライブモデルです。監視対象オブジェクトと監視対象オブジェクトの間で通信を行うことができますが、どちらか一方について詳しく知る必要はありません。

プロキシ

プロキシデザインパターンは、別のオブジェクトへのアクセスを制御するために、別のオブジェクトのサロゲートまたはプレースホルダーを提供します。このパターンを使用して、別のオブジェクトへのアクセスを制御する代表的な、またはプロキシのオブジェクトを作成します。これは、リモートであるか、作成に費用がかかるか、保護が必要な場合があります。このパターンは、構造的にDecoratorパターンに似ていますが、目的は異なります。デコレータはオブジェクトに動作を追加しますが、プロキシはオブジェクトへのアクセスを制御します。

受付係

受付設計パターンは、アプリケーションの実行コンテキストで発生するイベントを別の実行コンテキストにリダイレクトして処理するという一般的な問題に対処します。ハイブリッドパターンです。 「Gang of Four」の本には登場していませんが、その本で説明されているCommand、Memo、Proxyのデザインパターンの要素を組み合わせています。また、トランポリンパターンのバリエーションでもあります(これも本には含まれていません)。このパターンでは、イベントは最初にトランポリンオブジェクトによって受信されます。これは、イベントが処理のためにターゲットオブジェクトに直ちにバウンスまたはリダイレクトされるためです。

シングルトン

シングルトン設計パターンにより、クラスには1つのインスタンスのみが含まれ、グローバルなアクセスポイントが提供されます。クラスはその唯一のインスタンスを追跡し、他のインスタンスを作成できないようにします。シングルトンクラスは、単一のオブジェクトがグローバルリソースへのアクセスを提供することが理にかなっている状況に適しています。

テンプレートメソッド

テンプレートメソッドのデザインパターンは、操作のアルゴリズムのスケルトンを定義し、いくつかのステップをサブクラスに委ねます。テンプレートメソッドパターンにより、サブクラスはアルゴリズムの構造を変更せずにアルゴリズムの特定のステップを再定義できます。

出典:ココアデザインパターン .

108
DrummerB

実際のアプリケーションでは、コードベースは時間とともに複雑になり、テストと保守が困難な大規模なView Controllerになります。解決策は、 [〜#〜] mvvm [〜#〜] を使用することです。これは、MVC自体のより優れた代替手段です。

2
Jani

アプリケーションでMVVM設計パターンを使用することは、プロジェクトで一部のコンテンツを表示するために行うビジネスロジックに関連しています。ビューのコンテンツを表示するためにこれ以上ロジックを必要としない場合、MVCを使用できますが、これらのコンテンツを表示するためにビジネスロジックを作成する必要がある場合、この場合のベストプラクティスは、このロジックを別のレイヤーに配置してMVVMにすることですこの場合、MVVMのViewModelにはこのロジックが含まれます。

私の意見では、これらの理由により、レベル設計においてMVVMはMVCよりも優れています

  • MVVMは既存のMVCアーキテクチャと互換性があります。
  • MVVMを使用すると、アプリのテストが容易になります。
  • MVVMは、バインディングメカニズムで最適に機能します。

MVVMとMVCとの互換性

  • MVC>モデル、ビュー、コントローラー
  • MVVM> Model、View、ViewModel> Model、(ViewController)、ViewModel
1
Ahmed Askar