本文是設計模式的第五篇-原型模式(prototype pattern)。原型模式:用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。通俗的講就是當需要建立乙個新的例項化物件時,我們剛好有乙個例項化物件,但是已經存在的例項化物件又不能直接使用。這種情況下拷貝乙個現有的例項化物件來用,可能會更方便。本文會深度解析原型模式的實際應用場景和優點。
用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。其中有乙個詞很重要,那就是拷貝。可以說,拷貝是原型模式的精髓所在。
原型模式:用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。通俗的講就是當需要建立乙個新的例項化物件時,我們剛好有乙個例項化物件,但是已經存在的例項化物件又不能直接使用。這種情況下拷貝乙個現有的例項化物件來用,可能會更方便。
c++深入理解原型模式目錄
一、原型模式
1. 示例
二、使用場景
三、個人理解
/*
* 關鍵**:拷貝,return new classname(*this);
*/#include
using namespace std;
//提供乙個抽象轉殖基類。
class clone;
//具體的實現類
class sheep:public clone
~sheep()
//關鍵**拷貝建構函式
sheep(const sheep& obj)
//關鍵**轉殖函式,返回return new sheep(*this)
clone* clone()
void show()
private:
int m_id;
string m_name;};
int main()
執行結果:
1. 當new乙個物件,非常繁瑣複雜時,可以使用原型模式來進行複製乙個物件。比如建立物件時,建構函式的引數很多,而自己又不完全的知道每個引數的意義,就可以使用原型模式來建立乙個新的物件,不必去理會建立的過程。
2. 當需要new乙個新的物件,這個物件和現有的物件區別不大,我們就可以直接複製乙個已有的物件,然後稍加修改。
3. 當需要乙個物件副本時,比如需要提供物件的資料,同時又需要避免外部對資料物件進行修改,那就拷貝乙個物件副本供外部使用。
原型模式最主要的功能就是實現深拷貝,在原有流程中都會涉及到類**的變動。比如:上面示例的**部分在實現原型模式都會涉及到原有**的改變,那麼:請看下圖
上圖這個說明是兩種**,實現的都是一樣的功能都實現了深拷貝(深拷貝、淺拷貝請參考我的另一篇文章:一樣的變數值拷貝和位址不是同乙個位址。所以說設計模式只是一種規範和思想,它有值得參考地方。但是日常工作中和寫**中還得看具體要求或者個人習慣。
深入理解原型
functiona var b console.log a.constructor console.log b.constructor var a new a a.prototype var b new a console.log a.constructor console.log b.constr...
5 原型模式
參考 這種原型模式感覺沒啥用,因為他只能clone基本型別,如果是自定義類,是無法拷貝的,屬於淺拷貝,而且被拷貝的類還需要實現介面,太過於麻煩。這種原型模式是採用序列化,將物件序列化成位元組,再反序列化得到拷貝物件。只能拷貝相同的物件 param source 被轉殖的物件 return publi...
C 與設計模式(5) 原型模式
看這個模式的第一感覺,這並不是乙個高大上的設計模式,而是規範化 的乙個小技巧。原型模式是通過指定例項,通過拷貝來建立新的物件。在c 中,原型模式是通過提供clone介面和重寫拷貝建構函式 深拷貝 來實現的。class prototype virtual prototype virtual proto...