1
0

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.

デザインパターン、何それおいしいの?

Last updated at Posted at 2023-04-15

はじめに

プログラムを書くにあたり、ファイル構成を最近意識するようになりました。また、最近よく聞くドメイン駆動って何だろう。そんな中、デザインパターン学びと良いよと、昔講師が言っていたのを思い出し、勉強してみました。

デザインパターン何それおいしいの?そういうレベルですので、間違っていることなどコメントにてあれば教えて頂けると助かります。
※以下は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について勉強し説明したいと思います

ChatGPT4.0

1
0
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
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?