設計模式入門:原型模式
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設計模式原型
- 設計模式【5】-- 原型模式設計模式原型
- Java設計模式-原型模式Java設計模式原型
- 設計模式(十六)原型模式設計模式原型
- 23種設計模式(八)-原型設計模式設計模式原型
- 通俗 Python 設計模式——原型設計模式Python設計模式原型
- 設計模式之原型設計模式原型
- golang設計模式之原型模式Golang設計模式原型
- GoLang設計模式05 - 原型模式Golang設計模式原型
- 設計模式--原型模式(Prototype Pattern)設計模式原型
- go設計模式之原型模式Go設計模式原型
- 極簡設計模式-原型模式設計模式原型
- Java設計模式之原型模式Java設計模式原型
- 設計模式學習-原型模式設計模式原型
- 【大話設計模式】—— 原型模式設計模式原型
- 設計模式之-原型模式-Prototype設計模式原型
- Java設計模式5:原型模式Java設計模式原型
- 設計模式 #3 (原型模式、建造者模式)設計模式原型
- 設計模式入門-簡單工廠模式設計模式
- 設計模式(Java語言)- 原型模式設計模式Java原型
- 23種設計模式-原型模式(3)設計模式原型
- Java設計模式之(四)——原型模式Java設計模式原型
- 23種設計模式(4)-原型模式設計模式原型
- 我的Java設計模式-原型模式Java設計模式原型
- 《設計模式 》 - 4. 原型模式( Prototype )設計模式原型
- 23種設計模式之原型模式設計模式原型
- 設計模式--原型模式Prototype(建立型)設計模式原型
- 談談設計模式~原型模式(Prototype)設計模式原型
- PHP設計模式之工廠模式和原型模式PHP設計模式原型