DesignPattern FactoryMethod
Sponsored Links
皆さんこんにちは
お元気ですか?家熱すぎわろたみたいなハートを持っています。
さて、本日はDesignPatternのFactoryMethodについて
FactoryMethodとは?
工場クラスを通じて、オブジェクトを返します。
このことにより内部の実装は気にせず、外部からメンバ関数(メソッド)にアクセスをすることができます。
つまり、実際のインスタンスを知らずに操作ができますね。
よく使われるケースでは、同じオブジェクトの内部をとっかえひっかえできることです。
変更箇所も一箇所ですみますね。
FactoryMethodの利点
①変更箇所が一箇所で済む
②内部を知らずに操作ができる。抽象的にコードを考えることができる
FactoryMethodの欠点
①新しいメソッドを増やすと面倒になります。
クラス図
ソースコード
返すオブジェクトは同じ名前のメンバ関数を指定するようにしてください。
#include <iostream> using namespace std; class Math{ public: virtual double calc(double a,double b) = 0; }; class Add:public Math{ public: double calc(double a,double b){ return a + b; } }; class Diff:public Math{ public: double calc(double a,double b){ return a - b; } }; class MathFactory{ public: Math* createMath(int id){ if(id == 0){ return new Add(); }else{ return new Diff(); } } }; int main(int argc, char const *argv[]){ MathFactory *mathfactory; Math *math = mathfactory->createMath(0); cout << math->calc(10, 20) << endl; math = mathfactory->createMath(1); cout << math->calc(10, 20) << endl; return 0; }
MathFactoryからMath classのオブジェクトを返し、それをmain関数内で操作しています。
取り替える時も、mathfactoryから呼び出している関数の内容を変更するだけで、操作ができています。
例えば・・・・クラスタリングのアルゴリズムみたいに、流れが同じものだけど、沢山のアルゴリズムを実装する時に、この手法だと変更する箇所は原則一緒になりますね。
素晴らしきかなFactoryMethod,あれ、Strategy Patternと何が違うんだ…。まだまだ勉強が必要です。