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 他にも色々あります。