23种设计模式C++源码与UML实现--原型模式
原型模式
一個復(fù)雜對象,具有自我復(fù)制功能,統(tǒng)一一套接口。
原型模式主要面對的問題是:某些結(jié)構(gòu)復(fù)雜的對象的創(chuàng)建工作,由于需求的變化,這些對象進場面對著劇烈的變化,但是他們卻擁有比較一致的接口。
原型模式(Prototype Pattern)是用于創(chuàng)建重復(fù)的對象,同時又能保證性能。這種類型的設(shè)計模式屬于創(chuàng)建型模式,它提供了一種創(chuàng)建對象的最佳方式。
這種模式是實現(xiàn)了一個原型接口,該接口用于創(chuàng)建當前對象的克隆。當直接創(chuàng)建對象的代價比較大時,則采用這種模式。例如,一個對象需要在一個高代價的數(shù)據(jù)庫操作之后被創(chuàng)建。我們可以緩存該對象,在下一個請求時返回它的克隆,在需要的時候更新數(shù)據(jù)庫,以此來減少數(shù)據(jù)庫調(diào)用。
角色和職責(zé)
從UML圖中能看出,客戶端是面向抽象類進行編程的,實現(xiàn)了客戶端和具體類ConcretePrototype之間的解耦合
[外鏈圖片轉(zhuǎn)存失敗,源站可能有防盜鏈機制,建議將圖片保存下來直接上傳(img-Wmjlnxms-1604720135838)(picture/image-20201107110421278.png)]
原型模式實現(xiàn)代碼如下,真實的功能其實相當于一個深Copy
#include <iostream> #include <string> extern "C"{ #include <string.h> }using namespace std; // 原型模式簡單來說就是自己實現(xiàn)了了對自己的深Copy 也就是copy函數(shù)的實現(xiàn)過程 class Person { public:virtual Person* clone() = 0;virtual void println() = 0; };class GoPherProgrammer : public Person { public:GoPherProgrammer(){m_name = "";m_age = 0;m_resume = NULL;setResume((char *)"aaaa");}GoPherProgrammer(string name, int age){m_name = name;m_age = age;m_resume = NULL;setResume((char *)"aaaa");}void setResume(char *pStr){if(m_resume !=NULL){delete m_resume;}m_resume = new char[strlen(pStr)+1];strcpy(m_resume, pStr);}virtual void println(){cout << "m_name:" << m_name << " m_age:" << m_age << " m_resume:" << m_resume << endl;}virtual Person *clone(){GoPherProgrammer *tmp = new GoPherProgrammer;*tmp = *this;return tmp;}private:string m_name;int m_age;char *m_resume; };int main(int argc, char const *argv[]) {Person *c1 = new GoPherProgrammer("xiaohua", 32);c1->println();Person *c2 = c1->clone();c2->println();cout << "simple factory test" << endl;return 0; }總結(jié)
以上是生活随笔為你收集整理的23种设计模式C++源码与UML实现--原型模式的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 软件测试——实验四
- 下一篇: 斐波那契数列升级版(洛谷P2626题题解