C++設計模式淺識原型模式

黄舟
發布: 2017-01-18 14:57:58
原創
1323 人瀏覽過

定義:用原型實例指定建立物件的種類,並且透過拷貝這些原型建立新的物件。

原型模式其實就是從一個物件再創建另一個可自訂的對象,而且不需要知道任何創建的細節。

原型模式主要考慮的深複製與淺複製,在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;
}
登入後複製

原型模式(Prototype)實作

[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中文網(www.php.cn)!


來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板