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

