デザパタ

Interpreter パターン

Interpreter pattern - Wikipedia DSL(Domain Specific Lanuage、ドメイン特化言語)を作るときに良いっぽい。要するにAST(Abstract Syntax Tree)を作るときに使うイメージかな?以下のコードは例の如くwikipediaにあったコードをC++に書きなおしたもの。サ…

Memento パターン

Memento パターン - Wikipediaオブジェクトを以前の状態に(ロールバックにより)戻す能力を提供、要するにわかりやすい例だとCtrl+Zですね。Caretakerが戻すための状態(Memento)の保持を行い、Originatorが自分の状態を元に戻す仕事を担当するというように役…

Observer パターン

Observer パターン - Wikipedia観察対象の状態が変化すると、観察者に対して通知される。Mediator パターンと良く似ているが、パターンの目的や視点は異なる。MediatorパターンではColleague役の間を取り持って、いろいろ処理を融通してやるために状態変化の…

Mediator パターン

Mediator パターン - Wikipediaオブジェクト(Colleague)間の通信を仲介者(Mediator)を通して行うことによって、オブジェクト同士の結合強度を下げる・モジュール間の依存度を下げることができる。以下の例はMediatorとしてチャットルームの管理者的なもの…

Facade パターン

Facade パターン - Wikipediaごちゃごちゃなクラス群を使用するための処理を、Facade(建物の正面の意味らしい)という窓口作ってそこに集約することで見やすくする感じ。あんまりおもしろくない。以下のコードはWikipediaのJAVA版をC++に直したもの。 #inclu…

Chain of Responsibility パターン

Chain of Responsibility パターン - Wikipedia複数のオブジェクトを鎖のようにつないでおき、そのオブジェクトの鎖を渡り歩いて目的の処理ができるまでたらいまわしにする。ここではNoSupport→LimitSupport→OddSupportクラスのオブジェクトの順に渡り歩き処…

Visitor パターン

Visitor パターン - Wikipediaデータ構造(Element)と処理(Visitor)の分離を実現。これにCompositeパターンを組み合わせると面白い。 ConcreteVisitorの追加は容易な一方、ConcreteElementの追加は難しい。ダブルディスパッチ - Wikipediaも関係があるので合…

Decorator パターン

Decorator パターン - Wikipediaオブジェクトにどんどんデコレーションをくっつけていくようなイメージ。実際にはどんどんオブジェクトをかぶせていく。くっつけられていくものは”機能”。以下の例はwikipediaに載って得いたJAVAのコードをC++に書き変えたも…

Composite パターン

Composite パターン - Wikipedia容器(Composite)と中身(Leaf)を同一視(Component)して、再帰的な構造を作るデザインパターン。以下の例のようにファイルとフォルダの関係のようなもん。一般に木構造で書けるものはこのパターンが当てはまる。addメソッドをど…

Strategy パターン

Strategy パターン - Wikipediaアルゴリズムを簡単に切り替えることができるようにしておくことで、同じ問題を別の方法で解くことを容易にする。Strategy パターンの クラス図は Bridge パターン - My Life as a Mock Quantのものと表面的には同じ。 #include<string></string>…

Builder パターン

Builder パターン - Wikipedia構造をもったオブジェクトを作成するパターン。構造を作り上げる過程の詳細はDirectorが隠ぺい。またDirectorは建築会社(Builder)にオブジェクト(今回はテキスト)の作成を依頼するものの、どこの会社(Text or HTMLBuilder)…

Prototype パターン

Prototype pattern - Wikipediaクラスからオブジェクトではなく、オブジェクトからオブジェクトを生成するパターン。Product(Prototype)だけを扱うManager(Client)が、UnderlinePen(Concrete Protype)を知ることなく新たなオブジェクトを生成することができ…

Bridge パターン

Bridge パターン - Wikipedia 「実装のクラス階層(Implementor)」と「機能のクラス階層(Abstraction)」を分けて、2つの独立したクラス階層にする。ついでに参照とポインタの関係も怪しかったのでいろいろやった。 #include<iostream> #include<string> using namespace std; /</string></iostream>…

Singleton パターン

Singleton パターン - Wikipediaそのクラスのインスタンスが1つしかないことを保証。一見簡単に書けるけど、単純に書いてしまうと(以下の例はすべて)マルチスレッド化した際に破たんするという実は奥が深いパターン。 参考LINK マルチスレッドにおける si…

Factory Method パターン

Factory Method パターン - Wikipediaインスタンスを生成する工場をTemplate Method パターンで構成したもの。Factory(Creator)でProduct(Product)の生成手順を記述しておいて、IDCardFactory(Concrete Creator)にIDCard(Concrete Productの作り方の詳細を記…

Template Method パターン

Template Method パターン - WikipediaAbstractDisplay(AbstractClass)で処理の骨組みを規定して、CharDisplay・StringClass(ConcreteClass)で処理の内容を具体化。 #include <iostream> #include <string> using namespace std; //AbstractClass class AbstractDisplay { publ</string></iostream>…

Adapterパターン

Adapter パターン - Wikipedia 上記LINKにある「委譲を利用したAdapter」の方で実装。継承を利用した版はC++だと多重継承になるんでめんどい。 Bannerクラス(Adaptee)が既に手元にある時、それをPrintBanner(Adapter)に委譲して、Printクラス(Target)として…

Iteratorパターン

完全にデザインパターンを忘れているので、復習を兼ねて1通りやっていこうと思う。手元ではJava言語で学ぶデザインパターン入門を見ながらやっている。 というわけで、今回はIteratorパターン。 Iterator パターン - Wikipedia だいたいどの言語でも実装さ…