C 5 深入理解原型模式

2021-10-18 14:23:42 字數 1599 閱讀 8043

本文是設計模式的第五篇-原型模式(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...