C++設計モードの工場方法モデルの実現と長所短所


工場の方法モードは簡単な工場モードの欠点の上で最適化を行うので、私達はすべて知っていて、簡単な工場のモードの中で、1つの製品のタイプを増加しますかます減らして、すべて工場の中のif-elseの判断を改正しなければなりません。これは明らかに私達のコード開発中の開閉原則に合わないです。
工場仕様モデル=簡易工場モード+「開閉原則」
定義思想:工場の父類は製品の対象となる公共インターフェースを定義し、工場の子類は具体的な製品の対象を生成することに責任を負っています。このようにする目的は製品類の実用化操作を工場のサブクラスに延期して完成することです。すなわち、工場のサブクラスを通じて、どの具体的な製品種類が実用化されるべきかを確定することです。
利点:
  • は具体的な類名を覚える必要がなく、具体的なパラメータさえ覚えておく必要がない。
  • オブジェクト作成と使用の分離を実現しました。
  • システムの拡張可能性がより良くなり、開閉原則に適合する。
  • 短所:
    システムのクラスはペアで増加し、システムの複雑さと理解度を増加しました。
    適用シーン:
  • クライアントは具体的な製品の名前を知る必要がなく、対応する工場を知るだけで
  • です。
  • 関心のないクラスの作成と実装の詳細
  • コード実現:(携帯電話製品)
    
    //    
    class AbstractPhone
    {
    public:
    	virtual void ShowName() = 0;
    };
    
    //  
    class Huawei : public AbstractPhone
    {
    public:
    	virtual void ShowName()
    	{
    		cout << "Huawei Phone" << endl;
    	}
    };
    
    //  
    class Xiaomi : public AbstractPhone
    {
    public:
    	virtual void ShowName()
    	{
    		cout << "Xiaomi Phone" << endl;
    	}
    };
    
    //  
    class Apple : public AbstractPhone
    {
    public:
    	virtual void ShowName()
    	{
    		cout << "Apple Phone" << endl;
    	}
    };
    
    //    
    class AbstractPhoneFactory
    {
    public:
    	virtual AbstractPhone* CreatePhone() = 0;
    };
    
    //    
    class HuaweiFactory : public AbstractPhoneFactory
    {
    public:
    	virtual AbstractPhone* CreatePhone()
    	{
    		return new Huawei();
    	}
    };
    
    //    
    class XiaomiFactory : public AbstractPhoneFactory
    {
    public:
    	virtual AbstractPhone* CreatePhone()
    	{
    		return new Xiaomi();
    	}
    };
    
    //    
    class AppleFactory : public AbstractPhoneFactory
    {
    public:
    	virtual AbstractPhone* CreatePhone()
    	{
    		return new Apple();
    	}
    };
    
    テスト:
    
    void test()
    {
    	//      
    	AbstractPhoneFactory* factory = nullptr;
    	//      
    	AbstractPhone* phone = nullptr;
    
    	//         
    	factory = new HuaweiFactory;
    	//            
    	phone = factory->CreatePhone();
    	phone->ShowName();
    
    	delete phone;
    	delete factory;
    
    	factory = new XiaomiFactory;
    	phone = factory->CreatePhone();
    	phone->ShowName();
    
    	delete phone;
    	delete factory;
    
    	factory = new AppleFactory;
    	phone = factory->CreatePhone();
    	phone->ShowName();
    
    	delete phone;
    	delete factory;
    }
    
    実行結果:

    締め括りをつける
    ここでC++デザインモードの工場仕様についての記事を紹介します。C++工場仕様に関する詳細を紹介します。以前の文章を検索したり、下記の関連記事を見たりしてください。これからもよろしくお願いします。