java 设计模式 prototype_Java设计模式之Prototype原型模式

一、场景描述

创建型模式中,从工厂方法模式,抽象工厂模式,到建造者模式,再到原型模式,我的理解是,创建对象的方式逐步从编码实现转向内存对象处理。

例如,在“仪器数据采集器”的子类/对象“PDF文件数据采集器”和“Excel文件数据采集器”的创建过程中

工厂模式下定义各子类,并由(抽象)工厂类Factory创建,因此各子类可在类定义中定义各自的属性;

建造者模式下,通过不同的创建者类Builder创建不同的子对象,此时不再定义子类;

而原型模式下,则完全由调用者基于父对象克隆创建子对象,不在针对子对象创建类或者其相关的工厂、建造者类。

三种模式对应于不同的场景,实际操作时,根据场景合理选择模式。

原型模式下,基于原型类对象,克隆创建新对象,因此为原型类对象赋予的属性值在新对象中可直接使用,免去了重复赋值;

例如仪器数据采集器的共同初始化工作可在原型类对象中完成,随后将其克隆出PDF文件数据采集器对象和Excel文件数据采集器对象,并为两对象属性做后续的扩展,免去了公共属性的初始化工作;

克隆操作在内存中完成,由于对象类型的属性值存储为引用,因此克隆分浅克隆和深克隆,通过Serializable接口实现深克隆。

二、示例代码

原型类:

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;

// }

/* 深复制 */

public EquipmentDataCapture newEquipmentDataCapture() throws IOException, ClassNotFoundException {

/* 写入当前对象的二进制流 */

ByteArrayOutputStream bos = new ByteArrayOutputStream();

ObjectOutputStream oos = new ObjectOutputStream(bos);

oos.writeObject(this);

/* 读出二进制流产生的新对象 */

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;

}

调用端:

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);

}

}

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/519410.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

一文纵览EMAS 到底内含多少阿里核心技术能力

EMAS的整体定位是阿里巴巴移动技术对外输出的主窗口,沉淀了阿里巴巴近10年在移动互联网技术架构上的积累以及在一系列垂直场景中所实践的核心技术能力。一方面,EMAS希望为广大开发者提供安全、稳定、快速、弹性的移动应用基础设施,另一方面也…

解决Windows中PLSQL连接虚拟机中Oracle缓慢的问题

文章目录1. 原因分析2. 解决方法1. 原因分析 Linux系统中的DNS解析在寻址的时候出现“错误”。这个跟我在用桥接模式连接网络的时候, 错误配置了“Network Configuration”中的DNS有关(在用Bridged模式联网时,可以不 用配置DNS)。…

万字长文!Unix和Linux你不知道的那些历史(详解版)

作者 | 程序员小乐来源 | 程序员小乐(ID:study_tech)00 前言 UNIX 与 Linux 之间的关系是一个很有意思的话题。在目前主流的服务器端操作系统中,UNIX 诞生于 20 世纪 60 年代末,Windows 诞生于 20 世纪 80 年代中期,…

“阿里巴巴小程序繁星计划”:20亿扶持200万小程序开发者和100万商家

3月21日,在2019阿里云峰会北京站上,阿里巴巴旗下的阿里云、支付宝、淘宝、钉钉、高德等联合发布“阿里巴巴小程序繁星计划”:提供20亿元补贴,扶持200万小程序开发者、100万商家。凡入选“超星”的小程序,入驻支付宝、淘…

java ip输入框_JavaScript实现IP地址的输入框方式

1 2 3 4 JScript实现的IP地址输入框5 6 7 8 .ip_input{width:20px;height:16px;font:normal 12px 宋体;color:#000000;border:0px;text-align:center;position:relative;top:1px; }9 .all_input{width:112;height:20px;font:normal 8px 宋体;color:#000000;border:1px solid #0…

linux 如何搭建sftp服务器

sftp采用的是ssh加密隧道,安装性方面较ftp强,而且依赖的是系统自带的ssh服务,不像ftp还需要额外的进行安装 文章目录一、服务器搭建分配二、sftp服务器搭建1. 创建sftp组2. 用户组3. 绑定用户组4. 配置5. 目录权限6. 用户、用户组、权限7. 关…

只需10分钟!就能用Flask,Docker和Jenkins部署机器学习模型

在生产环境中部署机器学习模型是数据工程中经常被忽视的领域。网上的大多数教程/博客都侧重于构建、训练和调整机器学习模型。如果它不能用于实际的预测,那么它又有什么用呢? 接下来了解一下有哪些部署选项吧:评估选项 在生产中部署机器学习模…

ftp工具类

文章目录1.依赖2. 工具类2. 业务处理类1.依赖 <dependency><groupId>com.alibaba</groupId><artifactId>fastjson</artifactId><version>1.2.56</version></dependency><dependency><groupId>commons-net</gro…

java调用qq接口_用java代码怎么去请求腾讯接口并返回值

这是参看代码&#xff0c;你看一下&#xff0c;里面的HttpClient包你要自己去下public static void main(String[] args) {CloseableHttpClient httpclient HttpClients.createDefault();String url "http://m.weather.com.cn/data/101200101.html";URI uri URI.c…

刚发布!新型病毒下,程序员可在家免费学习了!

亲爱的CSDN家人们&#xff1a;疫情当前&#xff0c;这个春节有点“寒”。截止1月31号24时&#xff0c;新型冠状病毒在全国已确诊11791名&#xff08;数字取自&#xff1a;人民日报8:40分发布信息&#xff09;&#xff0c;疑似病例已1w&#xff0c;受其影响&#xff0c;全国各地…

阿里巴巴的微服务开源之路

2019阿里云峰会北京开发者专场 侠之大者&#xff0c;为国为民。 在金庸小说中&#xff0c;郭靖和黄蓉是“侠之大者&#xff0c;为国为民”的典范&#xff0c;他们以布衣之身帮助宋军守护襄阳十余年。 技术的世界里&#xff0c;并无大小之分。 但当一群程序员由服务公司内部…

一文纵览自然语言生成的发展

人们对人工智能的兴趣随着科幻电影的诞生和发展变得愈发浓厚。每当我们听到“人工智能”这个词&#xff0c;便会联想到《终结者》、《黑客帝国》、《我&#xff0c;机器人》等电影。 机器人具有独立思考的能力在目前看来还比较遥远&#xff0c;但机器学习和自然语言理解领域已经…

java生成html表格数据_使用Java将表格数据导出成Excel格式

前言&#xff1a;本文使用后台处理的办法导出前端表格中显示的数据。引入依赖org.apache.poipoi3.17书写PoiUtilspublic classPoiUtils {public static ResponseEntity exportExcel(List marketList) throwsIOException {HttpHeaders headersnull;//创建文档HSSFWorkbook workb…

sftp 工具类

<!--sftp操作工具类--><dependency><groupId>com.jcraft</groupId><artifactId>jsch</artifactId><version>0.1.54</version></dependency>package com.example.demo.util;import com.jcraft.jsch.*; import lombok.ext…

基于机器学习场景,如何搭建特征数据管理中台?

「免费学习 60 节公开课&#xff1a;投票页面&#xff0c;点击讲师头像」作者 | 陈迪豪&#xff0c;第四范式资深架构师编辑 | Jane来源 | AI科技大本营&#xff08;ID&#xff1a;rgznai100&#xff09;一、机器学习场景与高性能特征管理中台理想的机器学习场景是给到数据&…

十年再出发!阿里云智能总裁张建锋演讲全记录

3月21日&#xff0c;“十年再出发”阿里云峰会于国家会议中心正式召开。阿里云智能总裁张建锋&#xff08;行癫&#xff09;携核心管理团队首次悉数亮相&#xff0c;并对阿里云做了全面的战略解读。以下是演讲全文。 张建锋&#xff1a;今天是我们阿里云智能升级之后第一次和大…

文件解析工具类

package com.example.demo.util;import lombok.extern.slf4j.Slf4j;import java.io.*; import java.util.ArrayList; import java.util.List;/*** 文件解析公共工具类** author gblfy* date 2020-10-13*/ Slf4j public class FileUtil {//------------------------------------…

java简单题目_Java考点知识简单练习题

Java考点知识简单练习题Java 技术具有卓越的通用性、高效性、平台移植性和安全性&#xff0c;广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互联网&#xff0c;同时拥有全球最大的开发者专业社群。下面是小编为大家搜索整理的java考试强化训练题&#xff0c…

数据科学家为什要用Git?怎么用?

也许你在别的地方听说过Git。也许有人告诉过你&#xff0c;Git只适合软件开发人员。如果你是数据科学家&#xff0c;那么Git其实对你很重要。本文作者希望能够通过经验分享让你了解Git的重要性&#xff0c;以及如何在你的数据科学工作中使用它。 什么是Git&#xff1f; Git是…

抗疫进展:多家科研机构联合筛选出五种可能有效的抗病毒药物

2月3日&#xff0c;华中科技大学同济医学院基础医学院、华中科技大学同济医学院附属武汉儿童医院、西安交通大学第一附属医院、中科院北京基因组研究所、华为云联合科研团队宣布&#xff0c;筛选出五种可能对2019新型冠状病毒&#xff08;2019-nCoV&#xff09;有效的抗病毒药物…