デザインパターンとは 

デザインパターンは、ソフトウェア開発において頻繁に発生する問題や課題に対する解決策のベストプラクティスをまとめた再利用可能な設計テンプレートです。

どうやら、デザインパターンはオブジェクト指向を上手く使う方法のことを言うみたいです。

オブジェクト指向とは

オブジェクト指向は、「オブジェクト」と呼ばれるモジュール毎に分割し、それらのオブジェクトがデータと操作を持って、相互にやり取りすることでソフトウェアを構築します。
たとえば、PlayerやEnemyなど、それぞれ自分の体力や攻撃力などのパラメーターだったり、攻撃や防御などの同じ名前のメソッドを持っているイメージです。
View側ではオブジェクトの処理を呼ぶだけで、実際の処理はオブジェクト毎が責任を持ってそれぞれ実装してるイメージです。
オブジェクト指向には、カプセル化やポリモーフィズムという特徴があります。

カプセル化

カプセル化によって、オブジェクトの内部状態は外部から直接アクセスされることなく保護され、データの整合性や安全性が確保されます。外部からは公開されたインターフェース(メソッド)を通じてオブジェクトにアクセスし、データの取得や変更を行います。

ポリモーフィズム

ポリモーフィズム(Polymorphism)は、オブジェクト指向の重要な概念であり、同じ名前のメソッドがオブジェクトによって、異なる振る舞いをすることです。具体的には、異なるクラスが同じメソッド名を持ち、それぞれのクラスが独自の動作を実装することができます。

有名なデザインパターン

ファサードパターン (Facade Pattern)

ファサードパターンは、複雑なサブシステムを簡単に利用できるようにするためのデザインパターンです。外部からのアクセスを一本化することで、システムの使用方法を簡潔にし、コードの可読性と保守性を向上させます。

例: 大規模なシステムで複数の異なるクラスやメソッドを呼び出す必要がある場合、ファサードパターンを使って、それらを1つの簡単なインターフェースを通じて操作できるようにします。

アダプターパターン (Adapter Pattern)

アダプターパターンは、互換性のないインターフェースを持つクラス同士を接続するためのデザインパターンです。アダプタークラスを介して、異なるインターフェースを持つクラスを統一的に利用できるようにします。

例: 異なる種類のデータベースや外部APIを統一的に操作したい場合に、アダプターパターンを用いて異なるインターフェースを持つデータベースクラスやAPIクラスを統一的に扱います。

シングルトンパターン (Singleton Pattern)

シングルトンパターンは、クラスのインスタンスが1つしか存在しないことを保証し、そのインスタンスへのグローバルなアクセスを提供するためのデザインパターンです。これにより、共有リソースの管理や設定の一元化が容易になります。

例: アプリケーション全体で使用される設定情報やログ管理など、1つのインスタンスだけで十分なものに対してシングルトンパターンを適用します。

オブザーバーパターン (Observer Pattern)

オブザーバーパターンは、あるオブジェクトの状態が変化したときに、その変化を他のオブジェクトに通知するためのデザインパターンです。通知を受け取るオブジェクトは「オブザーバー」と呼ばれ、通知を発行するオブジェクトは「サブジェクト」と呼ばれます。

例: GUIアプリケーションで、ボタンがクリックされたときに複数のリスナーに通知する場合に、オブザーバーパターンを使用します。リスナー(オブザーバー)はボタン(サブジェクト)の状態変化に応じて適切な処理を行います。