23
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

[iOS/Swift] アプリ開発の実務的アプローチで学ぶデザインパターン

Last updated at Posted at 2020-01-13

前書き

GoFのデザインパターンが世に登場した『オブジェクト指向における再利用のためのデザインパターン』は1995年の発行だそうで、もはや古典の域ですね。

Swiftなどのモダンな言語では「もう使わないパターン」とか「もっとシンプルに解決できるパターン」などもあり、具体的な解決方法として崇め奉るモノではないかなと思います。

しかし、GoFのデザインパターンを、「解決方法」ではなくて、開発で良く陥る「状況」と解決に至る「発想」、そしてそれに対する「名前付け」に着目すると、改めて研究してみる価値はあると考えます。

この記事シリーズは、iOS/Swiftエンジニアである執筆者個人が、
ごく普通のiOSアプリ開発でよくある状況
Swiftのコアライブラリやフレームワークで使われているパターン
着目してデザインパターンを学び直してみた記録です。

記事の一覧

生成に関するパターン 概要
Factory Method 実際に生成されるインスタンスに依存しない、インスタンスの生成方法を提供する。
Abstract Factory 関連する一連のインスタンスを状況に応じて、適切に生成する方法を提供する。
Builder 複合化されたインスタンスの生成過程を隠蔽する。
Singleton あるクラスについて、インスタンスが単一であることを保証する。
Prototype 同様のインスタンスを生成するために、原型のインスタンスを複製する。
構造に関するパターン 概要
Adapter 元々関連性のない2つのクラスを接続するクラスを作る。
Facade 複数のサブシステムの窓口となる共通のインタフェースを提供する。
Bridge クラスなどの実装と、呼出し側の間の橋渡しをするクラスを用意し、実装を隠蔽する。
Composite 再帰的な構造を表現する。
Decorator あるインスタンスに対し、動的に付加機能を追加する。
Flyweight 多数のインスタンスを共有し、インスタンスの構築のための負荷を減らす。
Proxy 共通のインタフェースを持つインスタンスを内包し、利用者からのアクセスを代理する。
振る舞いに関するパターン 概要
Chain of Responsibility イベントの送受信を行う複数のオブジェクトを鎖状につなぎ、それらの間をイベントが渡されてゆくようにする。
Command 複数の異なる操作について、それぞれに対応するオブジェクトを用意し、オブジェクトを切り替えることで、操作の切替えを実現する。
Mediator オブジェクト間の相互作用を仲介するオブジェクトを定義し、オブジェクト間の結合度を低くする。
Observer インスタンスの変化を他のインスタンスから監視できるようにする。
State オブジェクトの状態を変化させることで、処理内容を変えられるようにする。
Strategy データ構造に対して適用する一連のアルゴリズムをカプセル化し、アルゴリズムの切替えを容易にする。
【以下は割愛】
Interpreter 普通のiOSアプリ開発では利用ケースが限定的なので割愛
Iterator Swiftでは言語機能でサポートされているので割愛
Template Method Swiftではprotocolとして言語仕様に組み込まれているため割愛
Memento 普通のiOSアプリ開発では利用ケースが限定的なので割愛
Visitor 難解すぎて普通のiOSエンジニアが使っても幸せになれないような気がするので割愛(笑

※概要はWikipediaより引用

23
28
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
28

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?