国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 開(kāi)發(fā) > Java > 正文

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

2024-07-14 08:40:05
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

一、場(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í)有所幫助,也希望大家多多支持VeVb武林網(wǎng)。


注:相關(guān)教程知識(shí)閱讀請(qǐng)移步到JAVA教程頻道。
發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 濮阳市| 尚志市| 奉新县| 浦北县| 胶南市| 津市市| 双桥区| 星子县| 陵水| 乐安县| 喀什市| 广饶县| 惠东县| 融水| 建始县| 获嘉县| 宣汉县| 大名县| 泗阳县| 宜君县| 安平县| 沽源县| 来安县| 大宁县| 连江县| 青冈县| 永修县| 小金县| 江安县| 烟台市| 滁州市| 丽江市| 济南市| 黄石市| 贵南县| 柏乡县| 防城港市| 叶城县| 襄城县| 阿克苏市| 孝感市|