Java使用原型模式展現(xiàn)每日生活應(yīng)用案例詳解
本文實例講述了Java使用原型模式展現(xiàn)每日生活。分享給大家供大家參考,具體如下:
一、模式定義
用原型實例指定創(chuàng)建對象的種類,并且通過復(fù)制這些原型創(chuàng)建新的對象。
二、模式舉例
1 模式分析
我們借用每日上班情景耒說明這一模式。
2 故事情節(jié)分析圖
3 原型模式靜態(tài)建模
4 代碼示例
4.1 原型建立
package com.prototype.pojo; /** * 日常生活類 * * @author * */ public class DayLife implements Cloneable { // 構(gòu)造方法 public DayLife() { System.out.println("-- 執(zhí)行構(gòu)造方法了! --"); } // 起床 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 { // 調(diào)用超類的clone方法(超類?也沒有集成任何類啊?哪里來的超類?別忘記了,所有類都是Object的子類哦!) return (DayLife) super.clone(); } catch (Exception e) { } return null; } }
4.2 創(chuàng)建生成原型對象的抽象工廠
package com.prototype.factory; import com.prototype.pojo.DayLife; /** * 工廠類 * * @author * */ public interface ILifeFactory { /** * 生產(chǎn)DayLife對象 * * @return */ public DayLife getNewInstance(); }
4.3 創(chuàng)建生成原型對象的具體工廠
package com.prototype.factory.impl; import com.prototype.factory.ILifeFactory; import com.prototype.pojo.DayLife; /** * 工廠實現(xiàn)類 * * @author * */ public class LifeFactoryImpl implements ILifeFactory { // DayLife對象實例用于初始化 private static DayLife dayLife = null; /** * getNewInstance方法實現(xiàn): * * 首先判斷dayLife是否為null: * 如果是null,則使用new創(chuàng)建一個DayLife對象,同時設(shè)置初始內(nèi)容,然后賦值給dayLife對象實例,然后返回; * 如果不是null,則使用dayLift的clone方法產(chǎn)生一個新對象并復(fù)制給dayLife對象,然后返回 */ @Override public DayLife getNewInstance() { // 判斷dayLife是否為null if (dayLife == null) { // 如果為null // 輸出是使用new 產(chǎn)生的對象。注意:new這個只使用一次哦! System.out.println(" new DayLife !"); // 設(shè)置dayLife內(nèi)容 dayLife = new DayLife(); dayLife.setGetUp("7:00起床"); dayLife.setByBus("7:30坐公交車"); dayLife.setGetFood("8:30到公司附近的公交站下車,經(jīng)過路旁的早餐車時會順便買好早餐一起帶到公司"); dayLife.setNoon("午餐在公司附近的小餐館解決,然后在辦公室的座椅上小憩一會"); dayLife.setAfternoonWork("13:30開始了下午的工作"); dayLife.setGoHome("17:30準(zhǔn)時下班"); dayLife.setNight("晚上休閑娛樂"); } else { // 如果不為null // 輸出是使用clone方法產(chǎn)生的對象 System.out.println(" clone DayLife !"); // 將clone對象賦值給dayLife ,返回 dayLife = dayLife.clone(); } return dayLife; } }
4.4 每日工作情景展現(xiàn)
package com; import com.prototype.factory.ILifeFactory; import com.prototype.factory.impl.LifeFactoryImpl; import com.prototype.pojo.DayLife; /** * 主應(yīng)用程序 * * @author * */ public class Client { public static void main(String[] args) { // 創(chuàng)建工廠 ILifeFactory lifeFactory = new LifeFactoryImpl(); // 打印輸出DayLife默認(rèn)內(nèi)容 lifeFactory.getNewInstance().print(); // 再次獲得DayLife,修改getUp內(nèi)容后 輸出內(nèi)容 System.out.println("------------------------"); DayLife dayLife = lifeFactory.getNewInstance(); dayLife.setGetUp("早上賴床了!7::15才起床!"); dayLife.print(); // 再次獲得DayLife,修改getUp內(nèi)容后 輸出內(nèi)容 // System.out.println("------------------------"); // DayLife dayLife2 = lifeFactory.getNewInstance(); // dayLife2.setGetUp("早上賴床了!7::30才起床!"); // dayLife2.print(); } }
運行結(jié)果
new DayLife !
-- 執(zhí)行構(gòu)造方法了! --
7:00起床
7:30坐公交車
8:30到公司附近的公交站下車,經(jīng)過路旁的早餐車時會順便買好早餐一起帶到公司
午餐在公司附近的小餐館解決,然后在辦公室的座椅上小憩一會
13:30開始了下午的工作
17:30準(zhǔn)時下班
晚上休閑娛樂
------------------------
clone DayLife !
早上賴床了!7::15才起床!
7:30坐公交車
8:30到公司附近的公交站下車,經(jīng)過路旁的早餐車時會順便買好早餐一起帶到公司
午餐在公司附近的小餐館解決,然后在辦公室的座椅上小憩一會
13:30開始了下午的工作
17:30準(zhǔn)時下班
晚上休閑娛樂
三、該模式的設(shè)計原剛
1 克隆對象時對象的構(gòu)造方法不執(zhí)行
2 淺復(fù)制和深復(fù)制
四、使用場合
1 產(chǎn)生對彖的過程比較復(fù)雜,初始化需要許多資源
2 希望框架原型和產(chǎn)生對象分開時
3 同一個對象可能會供其他調(diào)用者同時調(diào)用訪問時
更多關(guān)于java算法相關(guān)內(nèi)容感興趣的讀者可查看本站專題:《Java數(shù)據(jù)結(jié)構(gòu)與算法教程》、《Java操作DOM節(jié)點技巧總結(jié)》、《Java文件與目錄操作技巧匯總》和《Java緩存操作技巧匯總》
希望本文所述對大家java程序設(shè)計有所幫助。
相關(guān)文章
如何使用Jenkins編譯并打包SpringCloud微服務(wù)目錄
這篇文章主要介紹了如何使用Jenkins編譯并打包SpringCloud微服務(wù)目錄,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2019-11-11Java實現(xiàn)線程安全單例模式的五種方式的示例代碼
這篇文章主要介紹了Java中實現(xiàn)線程安全單例模式的五種方式:餓漢式、枚舉單例、懶漢式、DCL懶漢式和靜態(tài)內(nèi)部類懶漢單例,感興趣的可以了解一下2022-03-03java數(shù)據(jù)結(jié)構(gòu)和算法中數(shù)組的簡單入門
在本文里小編給大家整理了關(guān)于java數(shù)據(jù)結(jié)構(gòu)和算法中數(shù)組的簡單入門知識點整理,需要的朋友們學(xué)習(xí)下。2019-06-06關(guān)于Https協(xié)議和HttpClient的實現(xiàn)詳解
這篇文章主要給大家介紹了關(guān)于Https協(xié)議和HttpClient實現(xiàn)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2018-05-05基于Eclipse 的JSP/Servlet的開發(fā)環(huán)境的搭建(圖文)
本文將會詳細(xì)地展示如何搭建JSP的開發(fā)環(huán)境。本次教程使用的是最新版的Eclipse 2018-09編輯器和最新版的Apache Tomcat v9.0,步驟詳細(xì),內(nèi)容詳盡,適合零基礎(chǔ)學(xué)者作為學(xué)習(xí)參考2018-12-12IDEA 當(dāng)前在線人數(shù)和歷史訪問量的示例代碼
這篇文章主要介紹了IDEA 當(dāng)前在線人數(shù)和歷史訪問量的實例代碼,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-08-08