溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

Java怎么使用原型模式展現(xiàn)每日生活應(yīng)用

發(fā)布時(shí)間:2021-06-24 09:30:45 來(lái)源:億速云 閱讀:121 作者:小新 欄目:編程語(yǔ)言

這篇文章將為大家詳細(xì)講解有關(guān)Java怎么使用原型模式展現(xiàn)每日生活應(yīng)用,小編覺(jué)得挺實(shí)用的,因此分享給大家做個(gè)參考,希望大家閱讀完這篇文章后可以有所收獲。

具體如下:

一、模式定義

用原型實(shí)例指定創(chuàng)建對(duì)象的種類(lèi),并且通過(guò)復(fù)制這些原型創(chuàng)建新的對(duì)象。

二、模式舉例

1 模式分析

我們借用每日上班情景耒說(shuō)明這一模式。

2 故事情節(jié)分析圖

Java怎么使用原型模式展現(xiàn)每日生活應(yīng)用

3 原型模式靜態(tài)建模

Java怎么使用原型模式展現(xiàn)每日生活應(yīng)用

4 代碼示例

4.1 原型建立

package com.prototype.pojo;
/**
 * 日常生活類(lèi)
 *
 * @author
 *
 */
public class DayLife implements Cloneable {
  // 構(gòu)造方法
  public DayLife() {
    System.out.println("-- 執(zhí)行構(gòu)造方法了! --");
  }
  // 起床
  private String getUp;
  // 坐公交
  private String byBus;
  // 下車(chē),買(mǎi)早餐
  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)用超類(lèi)的clone方法(超類(lèi)?也沒(méi)有集成任何類(lèi)啊?哪里來(lái)的超類(lèi)?別忘記了,所有類(lèi)都是Object的子類(lèi)哦?。?
      return (DayLife) super.clone();
    } catch (Exception e) {
    }
    return null;
  }
}

4.2 創(chuàng)建生成原型對(duì)象的抽象工廠

package com.prototype.factory;
import com.prototype.pojo.DayLife;
/**
 * 工廠類(lèi)
 *
 * @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)類(lèi)
 *
 * @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坐公交車(chē)");
      dayLife.setGetFood("8:30到公司附近的公交站下車(chē),經(jīng)過(guò)路旁的早餐車(chē)時(shí)會(huì)順便買(mǎi)好早餐一起帶到公司");
      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("早上賴(lài)床了!7::15才起床!");
    dayLife.print();
    // 再次獲得DayLife,修改getUp內(nèi)容后 輸出內(nèi)容
    // System.out.println("------------------------");
    // DayLife dayLife2 = lifeFactory.getNewInstance();
    // dayLife2.setGetUp("早上賴(lài)床了!7::30才起床!");
    // dayLife2.print();
  }
}

運(yùn)行結(jié)果

 new DayLife !
-- 執(zhí)行構(gòu)造方法了! --
7:00起床
7:30坐公交車(chē)
8:30到公司附近的公交站下車(chē),經(jīng)過(guò)路旁的早餐車(chē)時(shí)會(huì)順便買(mǎi)好早餐一起帶到公司
午餐在公司附近的小餐館解決,然后在辦公室的座椅上小憩一會(huì)
13:30開(kāi)始了下午的工作
17:30準(zhǔn)時(shí)下班
晚上休閑娛樂(lè)
------------------------
 clone DayLife !
早上賴(lài)床了!7::15才起床!
7:30坐公交車(chē)
8:30到公司附近的公交站下車(chē),經(jīng)過(guò)路旁的早餐車(chē)時(shí)會(huì)順便買(mǎi)好早餐一起帶到公司
午餐在公司附近的小餐館解決,然后在辦公室的座椅上小憩一會(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怎么使用原型模式展現(xiàn)每日生活應(yīng)用”這篇文章就分享到這里了,希望以上內(nèi)容可以對(duì)大家有一定的幫助,使各位可以學(xué)到更多知識(shí),如果覺(jué)得文章不錯(cuò),請(qǐng)把它分享出去讓更多的人看到。

向AI問(wèn)一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI