ファクトリクラスには、どの製品クラスのインスタンスをいつ使用するかを決定するために必要な判断ロジックが含まれています。
抽象製品クラスは、作成されたすべてのオブジェクトの親クラスです。
特定の製品クラスは、抽象製品クラスから継承された作成ターゲットです。
http://design-patterns.readthedocs.org/zh_CN/latest/creational_patterns/simple_factory.html
#include "Factory.h"
#include "ConcreteProductA"
#include "ConcreteProductB"
Product* Factory::createProduct(string proname) {
if ('A' == proname) {
return new ConcreteProductA();
}
else if('B' == proname) {
return new ConcreteProductB();
}
}
createProduct()
ファクトリクラスのファクトリメソッドは、多くの場合静的メソッドであり、クラス名で直接呼び出すことができます。とても使い勝手が良いです。
単純なファクトリモデルは、オブジェクトの作成をオブジェクト自体のビジネス処理から分離し、システムと結合を減らし、両方を比較的簡単に変更できるようにします。
問題は、工場の責任が重すぎて、新製品の追加には関連するロジックの変更が必要であり、ソフトウェア開発の開始と終了の原則(拡張のために開いている、変更のために閉じている)に準拠していないことです。また、ファクトリクラスが機能しなくなると、システム全体に影響します。
単純なファクトリモデルは静的ファクトリメソッドを使用するため、ファクトリロールが継承に基づいて階層を形成することはできません。
静的メソッドはクラスの動作であり、クラスのオブジェクトとは何の関係もありません。