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

原型模式

一、概念

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

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

二、代碼解析:

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

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

在這裏插入圖片描述
改造後再執行,地址不一樣了。
在這裏插入圖片描述

三、原型模式的優點:

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

四、原型模式的缺點

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

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章