設計模式入門:原型模式
UML類圖
程式碼示例
實際應用中,原型模式可以簡單理解為克隆操作。在大多數物件導向程式語言中,實現克隆操作並不複雜,對於Java,我們只需繼承Cloneable介面,並重寫Object的clone()即可(非必須)。
public class Teacher implements Cloneable {
/**
* 姓名
*/
private String name;
private Teacher(String name) {
try {
// 模擬初始化資源耗時較多
TimeUnit.SECONDS.sleep(5);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.name = name;
}
@Override
public String toString() {
return "Teacher{" +
"name='" + name + '\'' +
'}';
}
public static void main(String[] args) throws CloneNotSupportedException {
Teacher teacher = new Teacher("李老師");
// output: teacher = Teacher{name='李老師'}
System.out.println("teacher = " + teacher);
// clone is much faster
Teacher cloneTeacher = (Teacher) teacher.clone();
// output: cloneTeacher = Teacher{name='李老師'}
System.out.println("cloneTeacher = " + cloneTeacher);
}
}
clone()方法會丟擲未檢查的CloneNotSupportedException,通過原始碼瞭解下什麼情況下會產生該異常。
該方法有native
修飾,這說明它的具體實現在底層(參考JNI)。文件說明,在當前克隆類沒有實現Cloneable介面的情況下,該異常將會觸發。另外,還有這麼一句值得我們留意,Thus, this method performs a "shallow copy" of this object, not a "deep copy" operation.
,這說明clone()實現的是淺拷貝而不是深拷貝(下個話題深入)。最後,重寫clone()是非必須的,一般重寫只是用來提高方法的訪問許可權。
總結思考
原型模式通過(淺)拷貝現有物件以生成新的物件,屬於建立型模式中的一種。對比通過new的方式來例項化物件,這種模式不用重新初始化物件,可以動態的獲得物件執行時的狀態,也適用於需要優化效能的場景,例如當類的初始化需要消耗非常多的資源,就可以考慮使用這種模式了。
接觸原型模式,不可避免的就是關於淺拷貝和深拷貝的問題,下一篇準備深入瞭解下這個話題。
相關文章
- 設計模式(原型模式)設計模式原型
- 設計模式:原型模式設計模式原型
- 設計模式-原型模式設計模式原型
- 設計模式 —— 原型模式設計模式原型
- 設計模式入門設計模式
- Java設計模式-原型模式Java設計模式原型
- Java設計模式---原型模式Java設計模式原型
- 設計模式之原型模式設計模式原型
- 設計模式-原型模式(Prototype)設計模式原型
- 設計模式【5】-- 原型模式設計模式原型
- 設計模式(三)——原型模式設計模式原型
- java設計模式—原型模式Java設計模式原型
- 23種設計模式(八)-原型設計模式設計模式原型
- 設計模式之原型設計模式原型
- 設計模式--原型模式(Prototype Pattern)設計模式原型
- go設計模式之原型模式Go設計模式原型
- golang設計模式之原型模式Golang設計模式原型
- GoLang設計模式05 - 原型模式Golang設計模式原型
- 極簡設計模式-原型模式設計模式原型
- 設計模式 #3 (原型模式、建造者模式)設計模式原型
- 【設計模式(四)】建立型模式--原型模式設計模式原型
- 設計模式--原型模式及其程式設計思想設計模式原型程式設計
- 設計模式入門-簡單工廠模式設計模式
- 23種設計模式-原型模式(3)設計模式原型
- 《設計模式 》 - 4. 原型模式( Prototype )設計模式原型
- 設計模式(Java語言)- 原型模式設計模式Java原型
- Java設計模式之(四)——原型模式Java設計模式原型
- Java入門之初識設計模式---單列模式Java設計模式
- Java入門之初識設計模式—單列模式Java設計模式
- 設計模式快速學習(五)原型模式設計模式原型
- C#設計模式-原型模式(Prototype Pattern)C#設計模式原型
- Rust語言之GoF設計模式:原型模式RustGo設計模式原型
- 設計模式:原型模式介紹 && 原型模式的深拷貝問題設計模式原型
- 從JavaScript學習設計模式-01原型模式JavaScript設計模式原型
- 重溫23種設計模式(11):原型模式設計模式原型
- 重學 Java 設計模式:實戰原型模式Java設計模式原型
- java23種設計模式——四、原型模式Java設計模式原型
- java中23種設計模式--原型模式(Portotype)Java設計模式原型