[設計模式]Prototype原型模式

來源:互聯網
上載者:User
prototype原型模式

用原型執行個體指定建立對象的種類,並且通過拷貝這個原型來建立新的對象。 

 

小demo

prototype.h

#ifndef PROTOTYPE_H#define PROTOTYPE_H// 虛擬基類,所有原型的基類,提供Clone介面函數class Prototype{public:Prototype(){}virtual ~Prototype(){}virtual Prototype* Clone() = 0;};// 派生自Prototype,實現Clone方法class ConcreatePrototype1 : public Prototype{public:ConcreatePrototype1();ConcreatePrototype1(const ConcreatePrototype1& cp);virtual ~ConcreatePrototype1();virtual Prototype* Clone();};// 派生自Prototype,實現Clone方法class ConcreatePrototype2 : public Prototype{public:ConcreatePrototype2();ConcreatePrototype2(const ConcreatePrototype2& cp);virtual ~ConcreatePrototype2();virtual Prototype* Clone();};#endif

 

prototype.cpp

#include "Prototype.h"#include <iostream>ConcreatePrototype1::ConcreatePrototype1(){std::cout << "construction of ConcreatePrototype1\n";}ConcreatePrototype1::~ConcreatePrototype1(){std::cout << "destruction of ConcreatePrototype1\n";}ConcreatePrototype1::ConcreatePrototype1(const ConcreatePrototype1& cp){std::cout << "copy construction of ConcreatePrototype1\n";}Prototype* ConcreatePrototype1::Clone(){return new ConcreatePrototype1(*this);}ConcreatePrototype2::ConcreatePrototype2(){std::cout << "construction of ConcreatePrototype2\n";}ConcreatePrototype2::~ConcreatePrototype2(){std::cout << "destruction of ConcreatePrototype2\n";}ConcreatePrototype2::ConcreatePrototype2(const ConcreatePrototype2& cp){std::cout << "copy construction of ConcreatePrototype2\n";}Prototype* ConcreatePrototype2::Clone(){return new ConcreatePrototype2(*this);}

 

main.cpp

#include "Prototype.h"#include <stdlib.h>int main(){Prototype* pPrototype1 = new ConcreatePrototype1();Prototype* pPrototype2 = pPrototype1->Clone();Prototype* pPrototype3 = new ConcreatePrototype2();Prototype* pPrototype4 = pPrototype3->Clone();delete pPrototype1;delete pPrototype2;delete pPrototype3;delete pPrototype4;system("pause");return 0;}

 

Prototype模式的結構和實現都很簡單,其關鍵就是C++中拷貝建構函式的實現方式,這也是C++實現技術層面上的事情。在C++中拷貝建構函式曾經是很多程式員的噩夢,淺層拷貝(在位拷貝)和深層拷貝(主要指有指標,綜合物件的情況)的魔魘也是很多程式員在面試時候的快餐盒系統崩潰時候的根源之一。 

Prototype模式通過複製原型(prototype)而獲得新對象建立的功能,這裡prototype本身就是“對象工廠”(因為能夠生產對象),實際上prototype模式和Builder模式,AbstractFactory模式都是通過一個類(對象執行個體)來專門負責對象的建立工作(工廠對象),它們之間的區別是:Builder模式重在複雜物件的一步步建立(並不直接返回對象),AbstractFactory模式重在生產多個相互依賴類的對象,而prototype模式重在從自身負責自己建立新類。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.