ファクトリ メソッド: オブジェクトを作成するためのインターフェイスを定義し、サブクラスがどのクラスをインスタンス化するかを指定します。ファクトリ メソッドは、クラスのサブクラスへのインスタンス化を遅らせます。
単純なファクトリとの違い: 単純なファクトリは元のクラスを変更する必要があり、これは開始と終了の原則に違反します。ファクトリ メソッドは、このクラスの問題を回避します。オブジェクト作成プロセスをカプセル化する利点を維持し、ファクトリ クラスを追加するだけで済むため、単純なファクトリ ブランチ判断の問題が解決されます。
ファクトリ メソッド パターンには 4 つの役割が含まれています:
Product: 抽象製品
ConcreteProduct: 具体的な製品
Factory: 抽象ファクトリ
ConcreteFactory: 具体的なファクトリ
UML クラス図
雷峰から学ぶことを例として、ファクトリーメソッドモデルを使用して、雷峰から学ぶ人々は、雷峰のメソッドを抽象的な工場に対応する抽象的な製品と見なします。 。 Lei Feng から学ぶ人々のカテゴリを追加したい場合は、元のカテゴリを変更せずに、対応するカテゴリを追加するだけで済みます。
テストケース:
[code]int main(){ //工厂方法 IFactory *factory = new UnderGraduateFactory; //new一个大学生工厂 //创建学雷锋的学生 LeiFeng *student = factory->createLeiFeng(); //学生干了哪些雷锋方法 student->BuyRice(); //买米 student->Sweep(); //扫地 student->Wash(); //清洗 return 0; }
Lei Fengクラス(抽象プロダクト):
[code]class LeiFeng{ public: virtual void BuyRice(){ std::cout << "Buy rice.\n"; } virtual void Sweep(){ std::cout << "Sweep.\n"; } virtual void Wash(){ std::cout << "Wash.\n"; } };
Lei Fengから学ぶ人(具体的なプロダクト):
[code]class UnderGraduate: public LeiFeng{ }; //学雷锋的志愿者(具体产品) class Volunteer: public LeiFeng{ };
Lei Fengファクトリークラス(抽象ファクトリー):
[code]class IFactory{ public: //创建学雷锋对象 virtual LeiFeng* createLeiFeng(){ return NULL; } };
Lei Fengのオブジェクトファクトリーから学ぶ(具体的なファクトリー) :
[code]class UnderGraduateFactory: public IFactory{ LeiFeng* createLeiFeng(){ return new UnderGraduate; } }; class VolunteerFactory: public IFactory{ LeiFeng* createLeiFeng(){ return new Volunteer; } };
上記は、C++ デザイン パターンにおけるファクトリー メソッド パターンを簡単に理解するための内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) をご覧ください。