Java設計模式之 原型模式,簡單易於理解

原型模式

1、概念

原型模式(Prototype Pattern)是用於建立重複的對象,同時又能保證性能。這種類型的設計模式屬於建立型模式,它提供了一種建立對象的最佳方式。web

這種模式是實現了一個原型接口,該接口用於建立當前對象的克隆。當直接建立對象的代價比較大時,則採用這種模式。例如,一個對象須要在一個高代價的數據庫操做以後被建立。咱們能夠緩存該對象,在下一個請求時返回它的克隆,在須要的時候更新數據庫,以此來減小數據庫調用。
由於Java中的提供clone()方法來實現對象的克隆,因此Prototype模式實現一會兒變得很簡單。數據庫

2、代碼解析:

一、建立一個student類,包含一下屬性
在這裏插入圖片描述
二、賦值輸出在這裏插入圖片描述
三、第一種複製方式,直接使student2=student1,以下
在這裏插入圖片描述
四、使用克隆的方法
第一步:實現Cloneable接口,

在這裏插入圖片描述
第二步:重寫Object類Clone方法
在這裏插入圖片描述
在這裏插入圖片描述
在這裏插入圖片描述
改爲student的克隆
在這裏插入圖片描述
五、如今給student3克隆一個student1
在這裏插入圖片描述
克隆成功,s1和s3的地址是不同的,只是值同樣,一樣也能夠給s3修改屬性值,好比把名字從張三改爲李四
在這裏插入圖片描述
以上是淺度克隆,下面再來看看深度克隆,給student加一個數組
在這裏插入圖片描述
給數組set值並get
在這裏插入圖片描述
克隆後運行,發現數組的地址是同一個。
在這裏插入圖片描述
下面改造一下實現讓克隆後的數組的地址也不同
回到student類中手動改造一下克隆的代碼

在這裏插入圖片描述
改造後再執行,地址不同了。
在這裏插入圖片描述設計模式

3、原型模式的優勢:

1)因爲clone方法是由虛擬機直接複製內存塊執行,因此在速度上比使用new的方式建立對象要快。
2)當建立的對象實例較爲復的時候,使用原型模式能夠簡化對象的建立過程。
3)能夠在運行時動態的獲取對象的類以及狀態,從而建立一個對象數組

4、原型模式的缺點

1)須要爲每個快配備一個克隆方法,並且該克隆方法位於一個類的裏面,當對已有的類經行改造時須要修改源代碼,違背了開閉原則。
2)在實現深克降的時須要編寫較爲複雜的代碼,並且當對象之間存在多重嵌套引用的時候,爲了實現深克隆,每一層對象對應的類都必須支持深克隆,實現相對麻煩。緩存