本文實例講述了Java使用原型模式展現每日生活。分享給大家供大家參考,具體如下:
一、模式定義
用原型實例指定創建對象的種類,並且通過複製這些原型創建新的對象。
二、模式舉例
1 模式分析
我們藉用每日上班情景耒說明這一模式。
2 故事情節分析圖
3 原型模式靜態建模
4 代碼示例
4.1 原型建立
package com.prototype.pojo;/** * 日常生活類* * @author * */public class DayLife implements Cloneable { // 構造方法public DayLife() { System.out.println("-- 執行構造方法了! --"); } // 起床private String getUp; // 坐公交private String byBus; // 下車,買早餐private String getFood; // 中午小憩private String noon; // 下午開始工作private String afternoonWork; // 下班回家private String goHome; // 晚上休閒private String night; public String getGetUp() { return getUp; } public void setGetUp(String getUp) { this.getUp = getUp; } public String getByBus() { return byBus; } public void setByBus(String byBus) { this.byBus = byBus; } public String getGetFood() { return getFood; } public void setGetFood(String getFood) { this.getFood = getFood; } public String getNoon() { return noon; } public void setNoon(String noon) { this.noon = noon; } public String getAfternoonWork() { return afternoonWork; } public void setAfternoonWork(String afternoonWork) { this.afternoonWork = afternoonWork; } public String getGoHome() { return goHome; } public void setGoHome(String goHome) { this.goHome = goHome; } public String getNight() { return night; } public void setNight(String night) { this.night = night; } /** * 打印輸出日常生活信息*/ public void print() { System.out.println(this.getGetUp()); System.out.println(this.getByBus()); System.out.println(this.getGetFood()); System.out.println(this.getNoon()); System.out.println(this.getAfternoonWork()); System.out.println(this.getGoHome()); System.out.println(this.getNight()); } /** * clone方法*/ @Override public DayLife clone() { try { // 調用超類的clone方法(超類?也沒有集成任何類啊?哪裡來的超類?別忘記了,所有類都是Object的子類哦!) return (DayLife) super.clone(); } catch (Exception e) { } return null; }}4.2 創建生成原型對象的抽象工廠
package com.prototype.factory;import com.prototype.pojo.DayLife;/** * 工廠類* * @author * */public interface ILifeFactory { /** * 生產DayLife對象* * @return */ public DayLife getNewInstance();}4.3 創建生成原型對象的具體工廠
package com.prototype.factory.impl;import com.prototype.factory.ILifeFactory;import com.prototype.pojo.DayLife;/** * 工廠實現類* * @author * */public class LifeFactoryImpl implements ILifeFactory { // DayLife對象實例用於初始化private static DayLife dayLife = null; /** * getNewInstance方法實現: * * 首先判斷dayLife是否為null: * 如果是null,則使用new創建一個DayLife對象,同時設置初始內容,然後賦值給dayLife對象實例,然後返回; * 如果不是null,則使用dayLift的clone方法產生一個新對象並複制給dayLife對象,然後返回*/ @Override public DayLife getNewInstance() { // 判斷dayLife是否為null if (dayLife == null) { // 如果為null // 輸出是使用new 產生的對象。注意:new這個只使用一次哦! System.out.println(" new DayLife !"); // 設置dayLife內容dayLife = new DayLife(); dayLife.setGetUp("7:00起床"); dayLife.setByBus("7:30坐公交車"); dayLife.setGetFood("8:30到公司附近的公交站下車,經過路旁的早餐車時會順便買好早餐一起帶到公司"); dayLife.setNoon("午餐在公司附近的小餐館解決,然後在辦公室的座椅上小憩一會"); dayLife.setAfternoonWork("13:30開始了下午的工作"); dayLife.setGoHome("17:30準時下班"); dayLife.setNight("晚上休閒娛樂"); } else { // 如果不為null // 輸出是使用clone方法產生的對象System.out.println(" clone DayLife !"); // 將clone對象賦值給dayLife ,返回dayLife = dayLife.clone(); } return dayLife; }}4.4 每日工作情景展現
package com;import com.prototype.factory.ILifeFactory;import com.prototype.factory.impl.LifeFactoryImpl;import com.prototype.pojo.DayLife;/** * 主應用程序* * @author * */public class Client { public static void main(String[] args) { // 創建工廠ILifeFactory lifeFactory = new LifeFactoryImpl(); // 打印輸出DayLife默認內容lifeFactory.getNewInstance().print(); // 再次獲得DayLife,修改getUp內容後輸出內容System.out.println("------------------------"); DayLife dayLife = lifeFactory.getNewInstance(); dayLife.setGetUp("早上賴床了!7::15才起床!"); dayLife.print(); // 再次獲得DayLife,修改getUp內容後輸出內容// System.out.println("------------------------"); // DayLife dayLife2 = lifeFactory.getNewInstance(); // dayLife2.setGetUp("早上賴床了!7::30才起床!"); // dayLife2.print(); }}運行結果
new DayLife !
-- 執行構造方法了! --
7:00起床
7:30坐公交車
8:30到公司附近的公交站下車,經過路旁的早餐車時會順便買好早餐一起帶到公司午餐在公司附近的小餐館解決,然後在辦公室的座椅上小憩一會
13:30開始了下午的工作
17:30準時下班晚上休閒娛樂
------------------------
clone DayLife !
早上賴床了! 7::15才起床!
7:30坐公交車
8:30到公司附近的公交站下車,經過路旁的早餐車時會順便買好早餐一起帶到公司午餐在公司附近的小餐館解決,然後在辦公室的座椅上小憩一會
13:30開始了下午的工作
17:30準時下班晚上休閒娛樂
三、該模式的設計原剛
1 克隆對象時對象的構造方法不執行
2 淺複製和深複製
四、使用場合
1 產生對彖的過程比較複雜,初始化需要許多資源
2 希望框架原型和產生對象分開時
3 同一個對象可能會供其他調用者同時調用訪問時
更多關於java算法相關內容感興趣的讀者可查看本站專題:《Java數據結構與算法教程》、《Java操作DOM節點技巧總結》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設計有所幫助。