デザインパターン

MVVM

データバインディングを利用して、ViewとViewModelを連携させることで、ViewとModelを分離する手法をMVVMという。Webアプリケーション開発者から見た、MVCとMVP、そしてMVVMの違い - Qiita前回のデータバインディングをベースに、C++とLinuxCUIで、疑似的なM…

データバインディング

同じデータを複数のビューから参照し、データが変更されたら、紐づいたビューが一気に更新されるような機構をデータバインディングという。第5回 WPFの「データ・バインディング」を理解する (1/3):連載:WPF入門 - @ITMVVMをやる上でこれは欠かせないが、…

Dependency Injection

Dependency Injection(DI、依存性の注入)は、コンポーネント間の依存関係を外部から注入できるようにしたパターン。猿でも分かる! Dependency Injection: 依存性の注入 - Qiita括弧で括った文字列を作るファクトリークラスがあるとして、括弧の種類を引数な…

MVP

MVPは、MVCのControllerとPMのPresentationModelを合体したようなPresenterを使った手法。MVCモデルの問題点を解決するPMモデルとMVPモデル - GeekなNooblog処理内容はPMのバージョンと同じ。 class_custom_view::notify() class_view::notify() class_custo…

PM

PMは、PresentationModelという表示などに特化したModelが、ViewとModelの間に入るような手法。MVCモデルの問題点を解決するPMモデルとMVPモデル - GeekなNooblog1と2を渡して実行した場合は、足した結果が0以上なので数式を囲む記号としては"()"が使われる…

ReactiveX

ReactiveX(リアクティブプログラミング)は、.NETから生まれたパターンで、何らかの処理をした後にイベント通知を発行するObservableと、Observableを監視しイベント通知を受け取って処理するObserver、で構成されている。ReactiveXを説明できるようになるシ…

MVC

MVCは、アーキテクチャパターンの一種で、役割をM(Model)とV(View)とC(Controller)に分ける方法。MVCモデルの問題点を解決するPMモデルとMVPモデル - GeekなNooblogC++で作るので、まずは通知機能を実装する。observer.hを作成し、interface_observerのメン…

Interpreter

Interpreterパターンは、翻訳者(Interpreter)によって翻訳された指示に従って処理する構造。23.Interpreter パターン | TECHSCORE(テックスコア)main.cppで、式を解析して、計算結果を出力する簡単なインタプリター実装した。 $ $ vi main.cpp $ g++ -o mai…

Command

Commandパターンは、条件と要求を渡し、条件が整ったら、要求を実行してもらうような構造。22.Commandパターン | TECHSCORE(テックスコア)main.cppで、"print"と"exit"コマンドを追加。 $ vi main.cpp $ g++ -o main main.cpp command_loop.cpp print_comma…

Proxy

Proxyパターンは、代理人(Proxy)でもできる処理は代理人が処理し、できない処理は本体が行うような構造。21.Proxyパターン | TECHSCORE(テックスコア)main.cppで、class_proxy_printのコンストラクタに渡したclass_simple_printはnewで生成しているが、dele…

Flyweight

Flyweightパターンは、既に生成したインスタンスと実質同じであれば、新たに生成せず、他のインスタンスと共有することでリソースを無駄なく使うような構造。20.Flyweight パターン | TECHSCORE(テックスコア)main.cppで、"ABCDE"を2回、"XYZ"を1回、取得し…

State

Stateパターンでは、状態を定数リテラルなどで表すのではなく、クラスとして表すようにする。19.State パターン | TECHSCORE(テックスコア)main.cppで、定数リテラルだと、class_nostate_timezoneの中でif文が大量になり、分岐処理が大変だが、class_state_…

Memento

どこかでインスタンスのスナップショットを取っておき、いざというときにその状態を復元するような仕組みをMementoパターンという。18.Memento パターン | TECHSCORE(テックスコア)main.cppで、state->printで値を出力、state->nextで次の処理に進める。 途…

Observer

被観測者の状態が変化したら、観測者(Observer)に状態の変化があったことを通知するような構造をObserverパターンという。17.Observer パターン | TECHSCORE(テックスコア)main.cppで、staff1に10、staff2に20、staff3に30をセットしてる。 $ vi main.cpp $…

Mediator

複数のオブジェクト間の調整役となるオブジェクトを置くような構造をMediatorパターンという。16.Mediator パターン | TECHSCORE(テックスコア)main.cppで、managerが調整役(Mediator)となり、3つのstaffを調整する。 最初はstaff3つとも値を0にしておいて…

Facade

複数のクラスを組み合わせて処理を行う時に、その窓口となるクラスを作って、そこを経由していろいろなクラスの処理を行うようにする構造をFacadeパターンという。15.Facadeパターン | TECHSCORE(テックスコア)main.cppで、class_front::searchは窓口であり…

Chain of Responsibility

Chain of Responsibilityパターンは、ある処理がその部分の責任でできるならそこで処理し、できないなら上位部分に回すような構造。14.Chain of Responsibility パターン | TECHSCORE(テックスコア)main.cppで、センダーでイベントを送信して、ハンドラで処…

Visitor

Visitorパターンは、訪問側(visitor)を受け入れ側(acceptor)が受け入れ(accept)、その結果訪問側の処理を受け入れ側の中で実行するような構造。13.Visitor パターン | TECHSCORE(テックスコア)main.cppで、visitor側に走査する処理があるが、それをやるには…

Decorator

インスタンスにひとつひとつ機能を重ねて、盛っていくような場合に、Decoratorパターンを使う。12. Decorator パターン | TECHSCORE(テックスコア)main.cppに、ハイフンでくくる、括弧でくくる。 それだけではなく、ハイフンの外に括弧、括弧の外にハイフン…

Composite

ファイルとフォルダの関係のように、コンテンツとそのコンテンツを含むコンテナの構造が再帰的になっている場合、共通のインターフェースを実装して、意識せずに操作ができるような構造にしておく。 これがCompositeパターン。11. Composite パターン | TECH…

Strategy

とある処理で、状況によってはアルゴリズムを変更しなければならない時、切り替えられるような構造にしておくのに、Strategyパターンを使う。10. Strategy パターン | TECHSCORE(テックスコア)main.cppは、指定するstrategyが違うと、 $ vi main.cpp $ g++ -…

Bridge

『インターフェースが同じでも具体的実装例が違う』場合、それと、『そもそもの機能が違う』場合、この2つを独立して拡張したいときはBridgeパターン。9. Bridge パターン | TECHSCORE(テックスコア)main.cppは、『インターフェースが同じでも具体的実装例が…

AbstractFactory

とあるインスタンスに、いろいろな情報を設定したい時に、関係ない情報は設定したくないというのがある。 関係ある情報それ専用の工場を作り、そこから得た情報を設定できるような構造をAbstractFactoryパターンという。8. AbstractFactory パターン | TECHS…

Builder

作る過程は一緒だが、素材が違うような場合、Builderパターンを使う。7. Builder パターン | TECHSCORE(テックスコア)詳細は、 Sample/designpattern/builder/builder/src/builder at master · bg1bgst333/Sample · GitHubmain.cppは、'-'のBuilderと'*'のBu…

Prototype

あらかじめ作っておいた原型をコピーして新たなインスタンスを作りたいようなとき、Prototypeパターンを使う。6. Prototype パターン | TECHSCORE(テックスコア)詳細は、 Sample/designpattern/prototype/prototype/src/prototype at master · bg1bgst333/Sa…

Singleton

唯一のインスタンスが生成されたら、以降はそのインスタンスしか取得できないような構造がSingletonパターン。5. Singleton パターン | TECHSCORE(テックスコア)詳細は、 Sample/designpattern/singleton/singleton/src/singleton at master · bg1bgst333/Sa…

FactoryMethod

渡した引数によって生成するインスタンスが違うような場合に、FactoryMethodパターンは使う。4. FactoryMethod パターン | TECHSCORE(テックスコア)詳細は、 Sample/designpattern/factory_method/factory_method/src/factory_method at master · bg1bgst333…

TemplateMethod

内部の具体的な処理が違っても、大まかな処理の流れが定型化されたものである場合は、TemplateMethodパターンを使うことができる。3.TemplateMethod パターン | TECHSCORE(テックスコア)詳細は、 Sample/designpattern/template_method/template_method/src…

Adapter

文字列を出力する機能を持つクラスがあるとする。 この文字列にヘッダとフッタを付けて出力する機能を持つクラスを新たに定義したい。 この時、Adapterパターンを使うと、少ない修正で、文字列を出力するインターフェースを持ちつつ、ヘッダとフッタを付けて…

Iterator

C++のコレクション参照位置の移動でお馴染みのイテレータは、元々はIteratorパターンを実装したもの。1. Iteratorパターン 1 | TECHSCORE(テックスコア)class_array, class_element, class_iteratorの実装については、Sample/designpattern/iterator/iterato…