C++ デザイン パターンとプロトタイプ パターンの簡単な紹介

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

定義: プロトタイプ インスタンスを使用して、作成するオブジェクトのタイプを指定し、これらのプロトタイプをコピーして新しいオブジェクトを作成します。

プロトタイプ パターンは、実際には、作成の詳細をまったく知らなくても、オブジェクトから別のカスタマイズ可能なオブジェクトを作成することです。

プロトタイプ モードでは、主にディープ コピーとシャロー コピーが考慮されます。C++ クラスの設計では、コピー コンストラクターはシャロー コピーであり、代入演算子がオーバーロードされた場合はディープ コピーになります。

浅いコピー: コピーされたオブジェクトのすべての変数には元のオブジェクトと同じ値が含まれており、他のオブジェクトへの参照はすべて元のオブジェクトを指し続けます。

ディープコピー: 参照オブジェクトの変数が、元の参照オブジェクトではなく、コピーされた新しいオブジェクトを指すようにします。

テストケース:

[code]int main(){
    //生成对象
    ConcretePrototype * conProA = new ConcretePrototype();
    //复制自身
    ConcretePrototype *conProB = conProA->Clone();   //先clone后调用拷贝构造函数, Output: clone constructor

    delete conProA;
    conProA = NULL;

    delete conProB;
    conProB = NULL;

    return 0;
}
ログイン後にコピー

プロトタイプ実装

[code]//接口
class Prototype{
public:
    Prototype(){}
    virtual ~Prototype(){}
    virtual Prototype *Clone() = 0;
};

//实现
class ConcretePrototype: public Prototype{
public:
    ConcretePrototype(): m_counter(0) {}
    virtual ~ConcretePrototype(){}
    //拷贝构造函数
    ConcretePrototype(const ConcretePrototype &rhs){
        std::cout << "constructor\n";
        m_counter = rhs.m_counter;
    }

    //复制自身
    virtual ConcretePrototype *Clone(){
        //调用拷构造函数
        std::cout << "clone\n";
        return new ConcretePrototype(*this);
    }

private:
    int m_counter;
};
ログイン後にコピー

上記は、C++ デザインパターンのプロトタイプモードの内容です。その他の関連コンテンツについては、PHP 中国語 Web サイト (www.php.cn) に注目してください。


ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート