物件的克隆——原型模式(二)
7.3 完整解決方案
Sunny公司開發人員決定使用原型模式來實現工作週報的快速建立,快速建立工作週報結構圖如圖7-3所示:
圖7-3 快速建立工作週報結構圖
在圖7-3中,WeeklyLog充當具體原型類,Object類充當抽象原型類,clone()方法為原型方法。WeeklyLog類的程式碼如下所示:
//工作週報WeeklyLog:具體原型類,考慮到程式碼的可讀性和易理解性,只列出部分與模式相關的核心程式碼 class WeeklyLog implements Cloneable { private String name; private String date; private String content; public void setName(String name) { this.name = name; } public void setDate(String date) { this.date = date; } public void setContent(String content) { this.content = content; } public String getName() { return (this.name); } public String getDate() { return (this.date); } public String getContent() { return (this.content); } //克隆方法clone(),此處使用Java語言提供的克隆機制 public WeeklyLog clone() { Object obj = null; try { obj = super.clone(); return (WeeklyLog)obj; } catch(CloneNotSupportedException e) { System.out.println("不支援複製!"); return null; } } } |
編寫如下客戶端測試程式碼:
class Client { public static void main(String args[]) { WeeklyLog log_previous = new WeeklyLog(); //建立原型物件 log_previous.setName("張無忌"); log_previous.setDate("第12周"); log_previous.setContent("這周工作很忙,每天加班!");
System.out.println("****週報****"); System.out.println("周次:" + log_previous.getDate()); System.out.println("姓名:" + log_previous.getName()); System.out.println("內容:" + log_previous.getContent()); System.out.println("--------------------------------");
WeeklyLog log_new; log_new = log_previous.clone(); //呼叫克隆方法建立克隆物件 log_new.setDate("第13周"); System.out.println("****週報****"); System.out.println("周次:" + log_new.getDate()); System.out.println("姓名:" + log_new.getName()); System.out.println("內容:" + log_new.getContent()); } } |
編譯並執行程式,輸出結果如下:
****週報**** 周次:第12周 姓名:張無忌 內容:這周工作很忙,每天加班! -------------------------------- ****週報**** 周次:第13周 姓名:張無忌 內容:這周工作很忙,每天加班! |
通過已建立的工作週報可以快速建立新的週報,然後再根據需要修改週報,無須再從頭開始建立。原型模式為工作流系統中任務單的快速生成提供了一種解決方案。
【作者:劉偉 http://blog.csdn.net/lovelion】 |
相關文章
- 物件的克隆——原型模式(四)物件原型模式
- 物件的克隆——原型模式(三)物件原型模式
- 物件的克隆——原型模式(一)物件原型模式
- JAVA設計模式 2【建立型】原型模式的理解與使用、理解淺克隆和深克隆Java設計模式原型
- ECMAScript5中的物件,原型,原型鏈,原型的幾種繼承模式【一】物件原型繼承模式
- JavaScript建立物件(三)——原型模式JavaScript物件原型模式
- 3.4 PROTOTYPE(原型) — 物件建立型模式原型物件模式
- 【JS基礎】原型物件的那些事(二)JS原型物件
- Java中的物件“克隆”Java物件
- js物件的深度克隆!JS物件
- 理解js中的原型,原型物件,原型鏈JS原型物件
- 物件導向的程式設計之原型模式物件程式設計原型模式
- .NET物件克隆的深究 (轉)物件
- ES6時代,你真的會克隆物件嗎(二)物件
- 原生js實現物件的深克隆以及淺克隆JS物件
- JS的物件原型JS物件原型
- js深度克隆物件JS物件
- 物件如何深度克隆物件
- javascript 深度克隆物件JavaScript物件
- 原型物件與原型鏈原型物件
- JavaScript中的原型、原型鏈、原型模式JavaScript原型模式
- js基礎--原型物件與原型物件鏈JS原型物件
- 詳解 Java 中的物件克隆Java物件
- 如何實現物件的深度克隆物件
- JS的物件導向(理解物件,原型,原型鏈,繼承,類)JS物件原型繼承
- JS中的原型物件JS原型物件
- JavaScript深層克隆物件JavaScript物件
- js克隆一個物件JS物件
- 函式物件、物件、原型函式物件原型
- 物件獲取原型物件物件原型
- JS型別判斷、物件克隆、陣列克隆JS型別物件陣列
- JavaScript 物件 & 原型JavaScript物件原型
- Vue原始碼學習二 ———— Vue原型物件包裝Vue原始碼原型物件
- 說說JS中的原型物件和原型鏈JS原型物件
- 三張圖搞懂JavaScript的原型物件與原型鏈JavaScript原型物件
- vue 克隆物件時遇到的問題Vue物件
- Java 的常見 API 與物件克隆)JavaAPI物件
- VB.NET中物件的克隆 (轉)物件