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
Prototype模式相关推荐
- Factory模式与Prototype模式的异同
原型模式与工厂模式的定义,本文不想在这讲太多,本文主要想在这讲一下对原型模式的一些误解--将原型模式等价于工厂模式: 为什么会产生这种误导呢?其实也不是我们的错,关键在于设计模式这本书以及网上的其它资 ...
- java设计模式:prototype模式
prototype模式是在对象相似时使用.其是复制对象,并设置新的特征. interface Prototype {void setSize(int x);void printSize(); }cla ...
- 设计模式--原型(Prototype)模式
模式定义 指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 类图 应用场景 当代码不应该依赖于需要复制的对象的具体类时 优点 1.以不耦合具体类的情况下克隆对象: 2.避免重复的初始化代 ...
- 设计模式4-创建型模式-Prototype模式
意图:用原型实例指定创建对象的种类,并且通过拷贝这些原型对象创建新的对象. 原型模式的结构比较简单,在使用C++实现该模式时重点要注意deep copy和shallow copy的问题. protot ...
- 设计模式 - Prototype模式(原型模式)
作用: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. UML结构图: 抽象基类: 1)Prototype:虚拟基类,所有原型的基类,提供Clone接口函数接口函数: 1)Pro ...
- 设计模式-Prototype模式(原型模式)
目录 原型模式是什么? 为什么要用原型模式? 原型模式是什么? Prototype模式:不根据类来生成实例,而是根据实例来生成新实例. 怎么理解呢?举个例子,就是比如现在我们只有两个类,球(Ball) ...
- Java设计模式之从[魔兽世界副本]分析原型(Prototype)模式
"副本"是网络游戏任务的一种形式,它最初出现于无尽的任务,现在运用得最有名的就是魔兽世界的副本了,我们将它称为副本任务.副本任务一般是一个队伍的人一起闯关的,假设有队伍A.队伍B. ...
- 建造者模式与原型模式/builder模式与prototype模式/创建型模式
建造者模式 定义 用于简化复杂对象的创建 JDK中的建造者模式 java.lang.StringBuilder中的append()方法,每次调用后返回修改后的对象本身. public StringBu ...
- 设计模式学习笔记五——Prototype模式
动机:使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象.某些结构复杂对象面临着剧烈变化,但拥有比较稳定一致的接口,如何隔离出这些易变对象,使客户程序不随之改变? 场景:ThinkPa ...
最新文章
- mysql udf提权_MySQL日志安全分析技巧
- 平时用到那些linux命令,工作中经常用到的linux命令,你知道多少?
- VTK:网格之AddCell
- 人工智能“训练员”让 AI 更聪明
- Eureka-服务注册
- ios解锁动态图片_iOS 苹果开机启动的 滑动来解锁动画
- cookies与session
- 清华学霸直博简历火了:CPU、操作系统、编译器全自己写
- python 学习过程总结
- 在 iOS 客户端上通过 bitcode 为第三方库修复 bug
- 【模拟】NCPC 2014 E ceremony
- 面试官:你是如何调用 wait() 方法的?使用 if 还是 while?别答错了!
- UVa232.Crossword Answers
- Linux抓包命令tcpdump
- 英文环境中Wine微信不能显示中文
- JS实现数组和数组对象倒序(reverse方法)
- Android 自定义视频录制终极解决方案(翻转问题)
- python是个坑_Python 有什么不为人知的坑?
- C语言——兔子繁殖问题多解
- 4.千万日活的系统如何统计UV?
热门文章
- 创建线程的方式_创建线程有几种不同的方式?
- 【Pytorch神经网络实战案例】12 利用注意力机制的神经网络实现对FashionMNIST数据集图片的分类
- 图像目标分割_1 概述
- 就业阶段-java语言进价_day03
- python为什么不会溢出_深入分析python中整型不会溢出问题
- pwn和逆向的区别_Pwn之简单patch
- 十二、PHP框架Laravel学习笔记——构造器的查询表达式
- LeetCode 1760. 袋子里最少数目的球(二分查找)
- 支持向量机(Support Vector Machines,SVM)
- LeetCode 455. 分发饼干(贪心)