はじめに
プログラムを書くにあたり、ファイル構成を最近意識するようになりました。また、最近よく聞くドメイン駆動って何だろう。そんな中、デザインパターン学びと良いよと、昔講師が言っていたのを思い出し、勉強してみました。
デザインパターン何それおいしいの?そういうレベルですので、間違っていることなどコメントにてあれば教えて頂けると助かります。
※以下はChatGPT4.0で学習した内容です。
デザインパターンとは
ソフトウェア設計において、課題に対して効果的な解決策のパターン集です。
要は、旧来のエンジニアが考え出した問題の解決策の集めたツヨツヨナレッジですね。
過去のプロジェクトや経験から得られた知識を、再利用可能で柔軟な設計原則として共有することを目的としていて、デザインパターンは、コードの再利用性、拡張性、保守性を向上させることができるらしいです。それだけで学習する価値がありそうですね
GoF本というものにたくさん記載されているらしい
デザインパターンは大きく分けると三つ
生成パターン、構造パターン、振る舞いパターンに分けられる。
生成パターン
オブジェクトの生成方法に関するパターンで、オブジェクトの生成プロセスを効率的かつ柔軟にすることを目的としています。これにより、オブジェクトの再利用性と拡張性が向上します。
構造パターン
オブジェクトやクラスの構成方法に関するパターンで、ソフトウェアアーキテクチャの柔軟性と効率性を向上させることを目的としています。これにより、システムの保守性や拡張性が向上します。
振る舞いパターン
オブジェクト間の相互作用や通信方法に関するパターンで、オブジェクト間の関係を効果的に管理し、柔軟で再利用可能なコードを実現することを目的としています。これにより、システムのオブジェクトの再利用性と拡張性が向上します。
カテゴリ | パターン名 | 説明 |
---|---|---|
生成パターン | Singleton | クラスのインスタンス化が1つだけであることを保証します。 |
Factory Method | オブジェクトの生成をサブクラスに委譲し、依存関係をなくします。 | |
Abstract Factory | 関連するオブジェクトのグループを一貫して生成するインターフェースを提供します。 | |
Builder | 複雑なオブジェクトの構築プロセスをカプセル化します。 | |
Prototype | 既存のオブジェクトを複製することで新しいオブジェクトを生成します。 | |
構造パターン | Adapter | 互換性のあるインターフェースに異なるインターフェースを変換します。 |
Bridge | 抽象化と実装を分離し、それらを独立に変更できるようにします。 | |
Composite | オブジェクトの階層構造を構築し、個々のオブジェクトを同一視できるようにします。 | |
Decorator | オブジェクトに新しい機能を動的に追加する柔軟な構造を提供します。 | |
Facade | 複数のサブシステムを簡単なインターフェースで外部に公開します。 | |
Flyweight | 大量の類似オブジェクトを効率的に共有し、メモリ使用量を削減します。 | |
Proxy | オブジェクトへのアクセスを制御するための代理オブジェクトを提供します。 | |
振る舞いパターン | Chain of Responsibility | 責任の連鎖を通じてリクエストを適切なオブジェクトに渡します。 |
Command | リクエストをオブジェクトにカプセル化し、依存関係をなくします。 | |
Interpreter | 文法を表現するためのクラス階層を定義し、言語を解釈します。 | |
Iterator | 集合体の要素に順番にアクセスする方法を定義し、要素を分離します。 | |
Mediator | オブジェクト間の相互作用をカプセル化し、直接相互作用せずに協調できるようにします。 | |
Memento | オブジェクトの内部状態をキャプチャし、後で復元することができるようにします。 | |
Observer | オブジェクト間の一対多の依存関係を定義し、状態が変更された際に、すべての依存オブジェクトに通知します。 | |
State | オブジェクトの内部状態に応じて、オブジェクトの振る舞いを変更します。 | |
Strategy | 系列のアルゴリズムを定義し、それらを互換性のあるインターフェースにカプセル化し、アルゴリズムを選択して実行できるようにします。 | |
Template Method | オペレーションのスケルトンを定義し、サブクラスでオペレーションの詳細を実装できるようにします。 | |
Visitor | オブジェクト構造の要素に対する新しい操作を追加することができる柔軟性を提供します。 |
最後に
次回、Facade patternについて勉強し説明したいと思います