最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

Java設(shè)計(jì)模式之Prototype原型模式

 更新時(shí)間:2020年06月28日 15:23:33   作者:馬洪彪  
這篇文章主要為大家詳細(xì)介紹了Java設(shè)計(jì)模式之Prototype原型模式的相關(guān)資料,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下

一、場(chǎng)景描述

創(chuàng)建型模式中,從工廠方法模式,抽象工廠模式,到建造者模式,再到原型模式,我的理解是,創(chuàng)建對(duì)象的方式逐步從編碼實(shí)現(xiàn)轉(zhuǎn)向內(nèi)存對(duì)象處理。

例如,在“儀器數(shù)據(jù)采集器”的子類/對(duì)象“PDF文件數(shù)據(jù)采集器”和“Excel文件數(shù)據(jù)采集器”的創(chuàng)建過(guò)程中

工廠模式下定義各子類,并由(抽象)工廠類Factory創(chuàng)建,因此各子類可在類定義中定義各自的屬性;

建造者模式下,通過(guò)不同的創(chuàng)建者類Builder創(chuàng)建不同的子對(duì)象,此時(shí)不再定義子類;

而原型模式下,則完全由調(diào)用者基于父對(duì)象克隆創(chuàng)建子對(duì)象,不在針對(duì)子對(duì)象創(chuàng)建類或者其相關(guān)的工廠、建造者類。

三種模式對(duì)應(yīng)于不同的場(chǎng)景,實(shí)際操作時(shí),根據(jù)場(chǎng)景合理選擇模式。

原型模式下,基于原型類對(duì)象,克隆創(chuàng)建新對(duì)象,因此為原型類對(duì)象賦予的屬性值在新對(duì)象中可直接使用,免去了重復(fù)賦值;

例如儀器數(shù)據(jù)采集器的共同初始化工作可在原型類對(duì)象中完成,隨后將其克隆出PDF文件數(shù)據(jù)采集器對(duì)象和Excel文件數(shù)據(jù)采集器對(duì)象,并為兩對(duì)象屬性做后續(xù)的擴(kuò)展,免去了公共屬性的初始化工作;

克隆操作在內(nèi)存中完成,由于對(duì)象類型的屬性值存儲(chǔ)為引用,因此克隆分淺克隆和深克隆,通過(guò)Serializable接口實(shí)現(xiàn)深克隆。

二、示例代碼

原型類:

package lims.designpatterndemo.prototypedemo;

import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.io.Serializable;

public class EquipmentDataCapture implements Cloneable, Serializable {
 private String filePath = "file path";
 private String equipmentData = "file content";

 //
 public String getFilePath() {
 return this.filePath;
 }

 public void setFilePath(String filePath) {
 this.filePath = filePath;
 }

 public String getEquipmentData() {
 return this.equipmentData;
 }

 public void setEquipmentData(String equipmentData) {
 this.equipmentData = equipmentData;
 }

 //
 private static final long serialVersionUID = 1L;
 private SerializableObject obj;

 //
 public SerializableObject getObj() {
 return obj;
 }

 public void setObj(SerializableObject obj) {
 this.obj = obj;
 }
 //
 public EquipmentDataCapture getEquipmentDataCapture() throws CloneNotSupportedException { 
 EquipmentDataCapture capture = (EquipmentDataCapture) super.clone(); 
 return capture; 
 } 
// public EquipmentDataCapture getPdfFileCapture() throws CloneNotSupportedException { 
// EquipmentDataCapture capture = (EquipmentDataCapture) super.clone(); 
// capture.setEquipmentData("pdf file content");
// return capture; 
// } 
// public EquipmentDataCapture getExcelFileCapture() throws CloneNotSupportedException { 
// EquipmentDataCapture capture = (EquipmentDataCapture) super.clone(); 
// capture.setEquipmentData("excel file content");
// return capture; 
// } 
 /* 深復(fù)制 */ 
 public EquipmentDataCapture newEquipmentDataCapture() throws IOException, ClassNotFoundException { 
 
 /* 寫入當(dāng)前對(duì)象的二進(jìn)制流 */ 
 ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
 ObjectOutputStream oos = new ObjectOutputStream(bos); 
 oos.writeObject(this); 
 
 /* 讀出二進(jìn)制流產(chǎn)生的新對(duì)象 */ 
 ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray()); 
 ObjectInputStream ois = new ObjectInputStream(bis); 
 return (EquipmentDataCapture)ois.readObject(); 
 } 
}

class SerializableObject implements Serializable {
 private static final long serialVersionUID = 1L;
}

調(diào)用端:

package lims.designpatterndemo.prototypedemo;

public class PrototypeDemo {

 public static void main(String[] args) throws CloneNotSupportedException {
 EquipmentDataCapture edc = new EquipmentDataCapture();
 EquipmentDataCapture capture = null;
// capture = edc.getPdfFileCapture();
// capture = edc.getExcelFileCapture();
 capture = edc.getEquipmentDataCapture();
 capture.setEquipmentData("equipment data file content");
 String fileContent = capture.getEquipmentData();
 System.out.println(fileContent);
 }

}

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

相關(guān)文章

  • SpringBoot在接收參數(shù)的七種方式詳解

    SpringBoot在接收參數(shù)的七種方式詳解

    這篇文章主要介紹了SpringBoot在接收參數(shù)的七種方式詳解,隨著前后端的分離,接口方式開(kāi)發(fā)成為普遍的開(kāi)發(fā)形式,前端相對(duì)于后端來(lái)說(shuō),常用的接口傳參方式就一定要了解和熟悉,下面?我們梳理了常用的七種?Controller層接受參數(shù)的方式,需要的朋友可以參考下
    2023-10-10
  • Spring?Data?JPA?注解Entity關(guān)聯(lián)關(guān)系使用詳解

    Spring?Data?JPA?注解Entity關(guān)聯(lián)關(guān)系使用詳解

    這篇文章主要為大家介紹了Spring?Data?JPA?注解Entity關(guān)聯(lián)關(guān)系使用詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-09-09
  • JAVA使用前綴樹(shù)(Tire樹(shù))實(shí)現(xiàn)敏感詞過(guò)濾、詞典搜索

    JAVA使用前綴樹(shù)(Tire樹(shù))實(shí)現(xiàn)敏感詞過(guò)濾、詞典搜索

    本文主要介紹了JAVA使用前綴樹(shù)(Tire樹(shù))實(shí)現(xiàn)敏感詞過(guò)濾、詞典搜索,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2023-01-01
  • SpringMVC配置多個(gè)properties文件之通配符解析

    SpringMVC配置多個(gè)properties文件之通配符解析

    這篇文章主要介紹了SpringMVC配置多個(gè)properties文件之通配符解析,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2021-09-09
  • JPA findById方法和getOne方法的區(qū)別說(shuō)明

    JPA findById方法和getOne方法的區(qū)別說(shuō)明

    這篇文章主要介紹了JPA findById方法和getOne方法的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教。
    2021-08-08
  • java實(shí)現(xiàn)解析二進(jìn)制文件的方法(字符串、圖片)

    java實(shí)現(xiàn)解析二進(jìn)制文件的方法(字符串、圖片)

    本篇文章主要介紹了java實(shí)現(xiàn)解析二進(jìn)制文件的方法(字符串、圖片),小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-02-02
  • Spring中的@Transactional注解使用詳解

    Spring中的@Transactional注解使用詳解

    這篇文章主要介紹了Spring中的@Transactional注解使用詳解,@Transactional 是一個(gè)注解,用于在 Spring 框架中管理事務(wù)的聲明式事務(wù)管理機(jī)制,它可以應(yīng)用于方法或類級(jí)別,并指示方法或類在執(zhí)行時(shí)應(yīng)該被包裝在一個(gè)事務(wù)中,需要的朋友可以參考下
    2024-01-01
  • 談?wù)勗贘ava發(fā)送郵件中遇到的的問(wèn)題

    談?wù)勗贘ava發(fā)送郵件中遇到的的問(wèn)題

    本文介紹了在利用Java發(fā)送郵件過(guò)程中遇到的的兩個(gè)問(wèn)題,以及如何解決這兩個(gè)問(wèn)題。如果大家也遇到了這些問(wèn)題,可以來(lái)參考借鑒。
    2016-08-08
  • Java CAS原子操作詳解

    Java CAS原子操作詳解

    在synchronized的優(yōu)化過(guò)程中我們看到大量使用了CAS操作,CAS全稱Compare And Set(或Compare And Swap),簡(jiǎn)單來(lái)說(shuō)CAS操作就是一個(gè)虛擬機(jī)實(shí)現(xiàn)的原子操作
    2023-02-02
  • Spring 日志規(guī)范及作用

    Spring 日志規(guī)范及作用

    日志是在系統(tǒng)運(yùn)行過(guò)程中關(guān)鍵的節(jié)點(diǎn)的數(shù),這個(gè)些日志的記錄方便當(dāng)系統(tǒng)出現(xiàn)問(wèn)題方便問(wèn)題查找,這篇文章主要介紹了Spring 日志規(guī)范及作用,需要的朋友可以參考下
    2024-03-03

最新評(píng)論

且末县| 廉江市| 吕梁市| 康定县| 康定县| 马公市| 类乌齐县| 通榆县| 澄城县| 青川县| 土默特左旗| 山东省| 民和| 吉首市| 正定县| 灌南县| 连平县| 腾冲县| 油尖旺区| 平和县| 英德市| 犍为县| 沅陵县| 德令哈市| 丽江市| 海原县| 旬阳县| 永丰县| 九寨沟县| 邵东县| 雷州市| 阿拉善右旗| 颍上县| 肃宁县| 瓦房店市| 宿迁市| 四子王旗| 连州市| 成安县| 贡觉县| 乐至县|