你好我是辰兮,很高興你能來閱讀,本篇給你介紹Java設計模式之原型模式,通過簡單的案例給你講解,分享給初學者,大家一起進步。
1.JAVA基礎面試常考問題
: JAVA面試基礎常考題彙集2.JAVA面試SSM框架常考
:JAVA框架面試題彙集
一、序言
在有些系統中,存在大量相同或相似對象的創建問題,如果用傳統的構造函數來創建對象,會比較複雜且耗時耗資源,用原型模式生成對象就很高效,就像孫悟空拔下猴毛輕輕⼀吹就變出很多孫悟空⼀樣簡單。
二、原型模式的定義與特點
原型(Prototype)模式的定義如下:
用⼀個已經創建的實例作爲原型,通過複製該原型對象來創建⼀個和原型相同或相似的新對象。
在這⾥,原型實例指定了要創建的對象的種類。⽤這種⽅式創建對象⾮常⾼效,根本⽆須知道對象創建的細節。
例如,Windows 操作系統的安裝通常較耗時,如果複製就快了很多。在⽣活中複製的例⼦⾮常多,這⾥不⼀⼀列舉了。
三、原型模式的結構與實現
由於 Java 提供了對象的 clone() ⽅法,所以⽤ Java 實現原型模式很簡單。
1、模式的結構
原型模式包含以下主要⻆⾊。
- 抽象原型類:規定了具體原型對象必須實現的接⼝。
- 具體原型類:實現抽象原型類的 clone() ⽅法,它是可被複制的對象。
- 訪問類:使⽤具體原型類中的 clone() ⽅法來複制新的對象。
2、模式的實現
原型模式的克隆分爲淺克隆和深克隆,Java 中的 Object 類提供了淺克隆的 clone() ⽅法,具體原型類只要實現 Cloneable 接⼝就可實現對象的淺克隆,這⾥的 Cloneable 接⼝就是抽象原型類。淺拷貝實現Cloneable,重寫,深拷貝是通過實現Serializable讀取二進制流。
首先我們常見一個類繼承Cloneable接口,然後重寫裏面的clone方法
//具體原型類
public class Realizetype implements Cloneable
{
Realizetype()
{
System.out.println("具體原型創建成功!");
}
public Object clone() throws CloneNotSupportedException
{
System.out.println("具體原型複製成功!");
return (Realizetype)super.clone();
}
}
測試類
//原型模式的測試類
public class PrototypeTest {
public static void main(String[] args)throws CloneNotSupportedException {
Realizetype obj1=new Realizetype();
Realizetype obj2=(Realizetype)obj1.clone();
System.out.println("obj1==obj2?"+(obj1==obj2));
}
}
具體原型創建成功!
具體原型複製成功!
obj1==obj2?false
實現克隆操作,繼承Cloneable,重寫clone()方法。
原型模式同樣用於隔離類對象的使用者和具體類型(易變類)之間的耦合關係,它同樣要求這些“易變類”擁有穩定的接口。
3、原型模式的應用場景
①對象之間相同或相似,即只是個別的幾個屬性不同的時候。
②對象的創建過程比較麻煩,但複製比較簡單的時候。
public class Citation implements Cloneable {
String name;
String info;
String college;
public Citation(String name, String info, String college) {
this.name = name;
this.info = info;
this.college = college;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getInfo() {
return info;
}
public void setInfo(String info) {
this.info = info;
}
public String getCollege() {
return college;
}
public void setCollege(String college) {
this.college = college;
}
void display()
{
System.out.println(name+info+college);
}
public Object clone() throws CloneNotSupportedException
{
System.out.println("獎狀拷⻉成功!");
return (Citation)super.clone();
}
}
//原型模式的測試類
public class PrototypeTest {
public static void main(String[] args)throws CloneNotSupportedException {
Citation obj1=new Citation("盧本偉","同學:在2020學年獲得一等獎學金","武漢大學");
obj1.display();
Citation obj2=(Citation) obj1.clone();
obj2.setName("PDD");
obj2.display();
}
}
盧本偉同學:在2020學年獲得一等獎學金武漢大學
獎狀拷⻉成功!
PDD同學:在2020學年獲得一等獎學金武漢大學
注意:除設計模式外。在此免費贈送一套最新Java架構項目實戰教程+大廠面試題庫,有興趣的 點擊此處獲取,沒基礎勿進!
①原型模式(Prototype Pattern)用於創建重複的對象,同時又能保證性能。
②它屬於創建型設計模式,它提供了一種創建對象的最佳方法。
③這種模式是實現了一個原型接口,該接口用於創建當前對象的克隆。當直接創建對象的代價比較大時,則採用這種模式。
④例如,一個對象需要在一個高代價的數據庫操作之後被創建。我們可以緩存該對象,在下一個請求時返回它的克隆,在需要的時候更新數據庫,以此來減少數據庫調用。
The best investment is to invest in yourself
2020.06.02 記錄辰兮的第74篇博客