設計模式 C 設計模式 原型模式

2021-10-06 09:09:17 字數 2533 閱讀 8437

【設計模式】物件導向設計七大原則

【設計模式】設計模式概念和分類

【設計模式】c#設計模式:單例模式

【設計模式】c#設計模式:工廠方法模式

【設計模式】c#設計模式:抽象工廠模式

【設計模式】c#設計模式:建造者模式

【設計模式】c#設計模式:原型模式

原型模式例項

原型模式優點

原型模式缺點

原型模式使用場景

原型模式(prototype pattern):是一種物件建立型模式,用原型例項指定建立物件的種類,並且通過複製這些原型建立新的物件。原型模式允許乙個物件再建立另外乙個可定製的物件,無須知道任何建立的細節。原型模式的基本工作原理是通過將乙個原型物件傳給那個要發動建立的物件,這個要發動建立的物件通過請求原型物件拷貝原型自己來實現建立過程。通過複製乙個已經存在的例項來建立乙個新的例項。被複製的例項被稱為原型,這個原型是可定製的。

抽象原型(prototype):這是乙個抽象角色,通常由乙個介面或抽象類實現。此角色給出所有的具體原型類所需的介面。在 c#中,抽象原型角色通常實現了 icloneable 介面。

具體原型(concrete prototype):被複製的物件。此角色需要實現抽象的原型角色所要求的介面。

客戶(client):客戶端類向原型管理器提出建立物件的請求。

原型管理器(prototype manager):建立具體原型類的物件,並記錄每乙個被建立的物件。

在原型模式結構中定義了乙個抽象原型類,實現.net的system命名空間為我們提供了乙個icloneable介面,它包含了乙個方法clone(),提供該型別的物件的副本,來實現物件的拷貝。

通常情況下,乙個類包含一些成員物件,在使用原型模式轉殖物件時,根據其成員物件是否也拷貝,原型模式可以分為兩種形式:深拷貝淺拷貝

該介面使你能夠建立現有物件的副本的自定義的實現。該介面只提供了,乙個clone方法,實現物件的淺拷貝。有淺拷貝,那麼就有相對應的深拷貝。但該介面並沒有對我們提供,需要我們自己實現。

淺拷貝(shallow clone):當原型物件被複製時,只複製它本身和其中包含的值型別的成員變數,而引用型別的成員變數並沒有複製。將原來物件中的所有字段逐個複製到乙個新物件,如果欄位是值型別,則簡單地複製乙個副本到新物件,改變新物件的值型別字段不會影響原物件;如果欄位是引用型別,則複製的是引用,改變目標物件中引用型別欄位的值將會影響原物件。

在c#中呼叫 memberwiseclone() 方法即為淺複製。如果欄位是值型別的,則對字段執行逐位複製,如果欄位是引用型別的,則複製物件的引用,而不複製物件。

c#中淺拷貝方法介紹:

public

class

shallowclone

:icloneable

}

深拷貝(deep clone):除了物件本身被複製外,物件所包含的所有成員變數也將被複製。與淺複製不同之處在於對引用型別的處理,深複製將新物件中引用型別字段指向複製過的新物件,改變新物件中引用的任何物件,不會影響到原來的物件中對應欄位的內容。

c#中深拷貝方法介紹:

利用反射實現

public

static t deepcopy

<

t>

(t obj)

catch

}return

(t)retval;

}

利用xml序列化和反序列化實現

public

static t deepcopy

<

t>

(t obj)

return

(t)retval;

}

利用二進位制序列化和反序列化實現

public

static t deepcopy

<

t>

(t obj)

return

(t)retval;

}

在這裡插入**片
隱藏了物件的建立細節,對有些初始化需要占用很多資源的類來說,對效能也有很大提高。

在需要新物件時,可以使用clone來快速建立建立乙個,而不用使用new來構建。

每乙個類都需要乙個clone方法,而且必須通盤考慮。對於深拷貝來說,每個關聯到的型別都不許實現iclonable介面,並且每增加或修改乙個欄位是都需要更新clone方法。

(1)類初始化需要消化非常多的資源,這個資源包括資料、硬體資源等

(2)通過new產生乙個物件需要非常繁瑣的資料準備或訪問許可權,則可以使用原型模式

(3)乙個物件需要提供給其他物件訪問,而且各個呼叫者可能都需要修改其值時,可以考慮使用原型模式拷貝多個物件供呼叫者使用。

(4)在實際專案中,原型模式很少單獨出現,一般是和工廠模式一起出現,通過clone方法建立乙個物件,然後由工廠方法提供給呼叫者。

C 設計模式 原型模式

定義 用原型 prototype 例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。結構 理解 1.prototype 是原型基類,提供clone 純虛方法,它根據不同的派生類來轉殖不同的物件。2.concreteprototype 是原型具體類。實現clone 方法,轉殖自己,返回轉殖後的...

c 設計模式(原型模式)

good 從乙個物件再建立另外乙個可定製的物件,而無需知道任何建立的細節。並能提高建立的效能。說白了就copy技術,把乙個物件完整的copy出乙份。例 include include include using namespace std class prototype 抽象基類 prototype...

C 設計模式 原型模式

用原型例項指定建立物件的種類,並且通過拷貝這些原型建立新的物件。建立型模式中乙個比較特殊的模式 原型模式,有個最大的特點是轉殖乙個現有的物件,這個轉殖的結果有2種,一種是淺度複製,另一種是深度複製。建立型模式一般是用來建立乙個新的物件,然後我們使用這個物件完成一些物件的操作,我們通過原型模式可以快速...