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

來源:互聯網
上載者:User
定義:用原型執行個體指定建立對象的種類,並且通過拷貝這些原型建立新的對象。

原型模式其實就是從一個對象再建立另外一個可定製的對象,而且不需要知道任何建立的細節。

原型模式主要考慮的深複製與淺複製,在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++設計模式淺識原型模式的內容,更多相關內容請關注topic.alibabacloud.com(www.php.cn)!

  • 相關文章

    聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.