Prototype模式

原型模式创建对象不调用原对象的构造函数,是直接copy原对象的
浅克隆:对值类型的成员变量进行值的复制,对引用类型的成员变量只复制引用,不复制引用的对象.
深克隆:对值类型的成员变量进行值的复制,对引用类型的成员变量也进行引用对象的复制.

/**
* Created by marcopan on 17/10/20.
*/
public class Prototype implements Cloneable {
private String name;

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}
}
/**
* Created by marcopan on 17/10/20.
*/
public class NewPrototype implements Cloneable {
private String id;
private Prototype prototype;

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public Prototype getPrototype() {
return prototype;
}

public void setPrototype(Prototype prototype) {
this.prototype = prototype;
}

public Object clone() {
NewPrototype ret = null;
try {
ret = (NewPrototype)super.clone();
ret.prototype = (Prototype)this.prototype.clone();
return ret;
} catch (CloneNotSupportedException e) {
e.printStackTrace();
return null;
}
}

public static void main(String[] args) {
Prototype pro = new Prototype();
pro.setName("original object");
NewPrototype newObj = new NewPrototype();
newObj.setId("test1");
newObj.setPrototype(pro);

NewPrototype clonObj = (NewPrototype)newObj.clone();
clonObj.setId("testClone");
clonObj.getPrototype().setName("changed object");

System.out.println("original object id:" + newObj.getId());
System.out.println("original object name:" + newObj.getPrototype().getName());

System.out.println("cloned object id:" + clonObj.getId());
System.out.println("cloned object name:" + clonObj.getPrototype().getName());
}
}
运行结果:

original object id:test1
original object name:original object
cloned object id:testClone
cloned object name:changed object



转载于:https://www.cnblogs.com/panning/p/7701136.html

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

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

相关文章

oauth2.0 php简化模式,OAuth2.0学习(1-5)授权方式2-简化模式(implicit grant type)

授权方式2-简化模式(implicit grant type)简化模式(implicit grant type)不通过第三方应用程序的服务器,直接在浏览器中向认证服务器申请令牌,跳过了"授权码"这个步骤,因此得名。所有步骤在浏览器中完成,令牌对访问者是…

人与人工的智能区别

来源:人机与认知实验室是非之心,智也! 为什么说这不仅仅是指伦理道德,其实,这涉及到人之智能、智慧的根本:非逻辑推理性的判断! 机器的判断是逻辑推理性的,对环境的适应性自然就弱了一些。作家菲茨杰拉德的…

Swift UISearchController

1.遵守协议 UISearchController 2.变量声明 var sc :UISearchController! 3.viewDidLoad中实现 sc UISearchController(searchResultsController: nil) sc.searchResultsUpdater self sc.dimsBackgroundDuringPresentation false//是否添加半透明覆盖层 self.tableView.tab…

matlab的三维伪彩图,matlab画等高线伪彩图

exp(-x.*x-y.*y); con tour3(z,20); title(三维等值线图); xlabel( X ),ylabel( Y ),zlabel( Z); grid; 4) 打印函数的伪彩色图......MATLAB总结 - 三维图形、等高线_数学_自然科学_专业资料。个人总结的一些...(系) 物电学院 专业班级 电子信息科学与技术 1103 指导教师 蒋媛 …

nginx基本配置与参数说明

#运行用户 user nobody; #启动进程,通常设置成和cpu的数量相等 worker_processes 1;#全局错误日志及PID文件 #error_log logs/error.log; #error_log logs/error.log notice; #error_log logs/error.log info;#pid logs/nginx.pid;#工作模式及连接数上限 events {…

AI大觉醒:图灵奖得主Bengio称AI将产生意识,未来机器学习核心是注意力机制

来源:人工智能AI技术人工智能会产生意识吗?这是一直以来美剧《西部世界》中探讨的问题。AI主人公觉醒,意识到这个世界是人类杀伐主宰的乐园,于是开启了逆袭之路。2020年ICLR上,图灵奖得主、蒙特利尔学习算法研究所主任…

php 文件指定位置添加内容,C++_VC++在TXT文件指定位置追加内容的方法,本文实例讲述了VC++操作文本文 - phpStudy...

VC在TXT文件指定位置追加内容的方法本文实例讲述了VC操作文本文件的方法,实现在txt文件指定位置插入内容。对于VC爱好者有一定的学习参考价值。主要功能代码如下:void CGoToFileDlg::OnPaint(){if (IsIconic()){CPaintDC dc(this);SendMessage(WM_ICONER…

人类应鼎力进行探索的35种颠覆性技术

本文转载自“战略前沿技术”,原标题《人类应鼎力进行探索的35种颠覆性技术》人类文明的进步,只要出现难以逾越的障碍,必然给人类的发展带来迷茫和灾难。而解决的路径只有一个:科技探索和创新。只有鼎力进行中的科技探索&#xff0…

【codevs2488】绿豆蛙的归宿

这个题开始正向拓扑排序,然后各种wa,心灰意冷,找了个题解,和同学研究了半天,甚至曾经一度认为题解是错的。 这个题正向反向应该都无所谓,但是我实在是蒻,打了半天正向都没打过去,最后…

php读取某类型文件代码,php代码实现读取文件头判断文件类型

php代码实现读取文件头判断文件类型,支持图片、rar、exe等后缀。案例://为图片的路径可以用d:/upload/11.jpg等绝对路径$file fopen($filename, "rb");$bin fread($file, 2); //只读2字节fclose($file);$strInfo unpack("C2chars"…

半导体光刻机行业深度报告:复盘ASML,探寻本土光刻产业投资机会

报告来源:西南证券1、 提要:光刻工艺是晶圆制造最核心环节,光刻产业链协同发展成为光刻机突破关键因子1.1 光刻定义晶体管尺寸,光刻工艺合计占芯片成本近 30% 2019 年全球半导体市场规模达 4090 亿美元,成为数码产业的…

C语言的参数传递原理解析(值传递)

本讲我们和大家一起来聊一聊C语言中有关参数传递的一些知识。 1.问题引入 请写出以下程序的打印结果。 #include // 将某整数加10 void add_by_10(int a){ a a 10; } int main(int argc, char *argv[]){ int a 2; add_by_10(a); printf("a %d\n", a); 上面的程序非…

字符串php手册,php知识点复习之字符串

欢迎进入Linux社区论坛,与200万技术人员互动交流 >>进入 /*echo mark qqqqqq\nqqqqqqbrqqqqqqqqqqqqq\rqqqqqqqqqqqqqqqqqq mark*/ //技术标志要另起一行,并且是顶格写! //作用跟""类似//最致命的一点是:mark后面…

一个诡异的循环:意识何以意识到意识自身?

© Lia Koltyrina / Shutterstock本文经公众号利维坦(ID:liweitan2014)授权转载存在的感觉可能只是一种感觉。——本凯利夫(Ben L. Callif)与其他事物相同,我似乎身处宇宙漩涡的中心,整个宇…

洛谷 P2251 质量检测

题目背景 无 题目描述 为了检测生产流水线上总共N件产品的质量,我们首先给每一件产品打一个分数A表示其品质,然后统计前M件产品中质量最差的产品的分值Q[m] min{A1, A2, ... Am},以及第2至第M 1件的Q[m 1], Q[m 2] ... 最后统计第N - M …

美军重视扩展现实技术的研究和应用

来源: 知远战略与防务研究所 编译:王绍祺美国陆军退役中将苏珊劳伦斯曾担任陆军G-6首席信息官、网络企业技术司令部司令,现为埃森哲联邦服务公司武装部队部门总经理。苏珊劳伦斯在美国《信号》杂志2019年10月号发表文章,指出扩展…

【Codeforces Round #442 (Div. 2) A】Alex and broken contest

【链接】 我是链接,点我呀:) 【题意】 在这里输入题意 【题解】 注意是所有的名字里面,只出现了其中某一个名字一次。 【代码】 #include <bits/stdc.h> using namespace std;const string temp[] {"Danil","Olya","Slava","Ann&q…

oracle 从pflie启动,oracle初始化参数文件管理

oracle实例是指运行状态下的oracle软件&#xff0c;是由内存结构跟一些进程结构组成的&#xff0c;主要实现数据库的访问跟控制功能&#xff0c;是oracle的核心。初始化参数文件是oracle实例运行所需要的参数配置文件&#xff0c;oracle实例启动是必须先从参数文件中读取数据。…

寒武纪开盘暴涨350%,市值突破1000亿,85后创始人身家超300亿!千亿盛宴背后隐忧不可忽视!...

来源&#xff1a;EETOP7月20日&#xff0c;寒武纪科创板首发上市&#xff0c;发行价每股64.39元&#xff0c;开盘价为250元/股&#xff0c;涨幅288%。最高价更是达到了295元/股&#xff0c;涨幅358%&#xff01;市值一度突破1000亿人民币&#xff0c;不过随后股民信心有所不足&…

Mac上的抓包工具Charles

今天就来看一下Mac上如何进行抓包&#xff0c;之前有一篇文章介绍了使用Fidder进行抓包 http://blog.csdn.net/jiangwei0910410003/article/details/19806999 不过可惜的是&#xff0c;Fidder使用C#开发的&#xff0c;所以就不能在Mac上使用了&#xff0c;不过还有另外一个抓包…