C++ デザイン パターンにおけるファクトリ メソッド パターンの簡単な紹介

黄舟
リリース: 2017-01-18 14:59:58
オリジナル
1485 人が閲覧しました

ファクトリ メソッド: オブジェクトを作成するためのインターフェイスを定義し、サブクラスがどのクラスをインスタンス化するかを指定します。ファクトリ メソッドは、クラスのサブクラスへのインスタンス化を遅らせます。

単純なファクトリとの違い: 単純なファクトリは元のクラスを変更する必要があり、これは開始と終了の原則に違反します。ファクトリ メソッドは、このクラスの問題を回避します。オブジェクト作成プロセスをカプセル化する利点を維持し、ファクトリ クラスを追加するだけで済むため、単純なファクトリ ブランチ判断の問題が解決されます。

ファクトリ メソッド パターンには 4 つの役割が含まれています:

Product: 抽象製品

ConcreteProduct: 具体的な製品

Factory: 抽象ファクトリ

ConcreteFactory: 具体的なファクトリ

UML クラス図


C++ デザイン パターンにおけるファクトリ メソッド パターンの簡単な紹介


雷峰から学ぶことを例として、ファクトリーメソッドモデルを使用して、雷峰から学ぶ人々は、雷峰のメソッドを抽象的な工場に対応する抽象的な製品と見なします。 。 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) をご覧ください。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!