GoFの各デザインパターン要約 - ntuf/Tips GitHub Wiki

GoFのデザインパターンクラスベース言語を対象としている ちなみにGoF(ゴフ)は以下の全23パターン

名称 説明
Abstract Factory 関連する部品を組み合わせて製品を作る
Builder 複雑なインスタンスを組み立てる
Factory Method インスタンス作成をサブクラスにまかせる
Prototype コピーしてインスタンスを作る
Singleton たった1つのインスタンス
Adapter 一皮かぶせて再利用
Bridge 機能の階層と実装の階層を分ける
Composite 容器と中身の同一視
Decorator 飾り枠と中身の同一視
Facade シンプルな窓口
Flyweight 同じものを共有して無駄をなくす
Proxy 必要になってから作る
Chain of Responsibility 責任のたらい回し
Command 命令をクラスにする
Interpreter 文法規則をクラスで表現する
Iterator 1つ1つ数え上げる
Mediator 相手は相談役1人だけ
Memento 状態を保存する
Observer 状態の変化を通知する
State 状態をクラスとして表現する
Strategy アルゴリズムをごっそり切り替える
Template Method 具体的な処理をサブクラスに任せる
Visitor 構造を渡り歩きながら仕事する

Strategyパターンも委譲だし、中身やっていることほぼ同じに思う。 一緒じゃないの?DelegateとStrategy? →Strategyは委譲とも書くことがあるが、正しくは転送(Forwarding)らしい。 https://qiita.com/jesus_isao/items/4b6b7846ccf5eb46b1bc

なぜ本当は転送であるべきはずのものが委譲として広まってしまったのでしょうか。 一説によれば、GoF(Gang of Four)のデザインパターン本で「転送」が「委譲」として紹介されてしまったことが原因であると言われています。1 有名なFowlerの『リファクタリング』でも、結城浩の『Java言語で学ぶデザインパターン入門』でも、ついでに2018年10月26日現在の日本語Wikipediaの「委譲」のページでも、転送が委譲として紹介されています。

転送は、継承という言語としての機能を、継承を使わずに実装する方法として使われることが多いです。継承と転送はよく似ていて、やろうとしていることは基本的に同じです。

最後に、転送を使ったデザインパターンの代表例を挙げておきます。 Chain of Responsibility Decorator Strategy 他にも色々あります。