java设计模式,原型模式
来源:互联网 发布:下载和平网络电视 编辑:程序博客网 时间:2024/05/16 08:08
package com.dasenlin.clone;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.ObjectInputStream;import java.io.ObjectOutputStream;import java.io.Serializable;/** * 原型模式 * @author Administrator *一个原型类,只需要实现Cloneable接口,覆写clone方法,此处clone方法可以改成任意的名称, *因为Cloneable接口是个空接口,你可以任意定义实现类的方法名,如cloneA或者cloneB,因为此处的重点是super.clone()这句话, *super.clone()调用的是Object的clone()方法,而在Object类中,clone()是native的, *具体怎么实现,我会在另一篇文章中,关于解读Java中本地方法的调用,此处不再深究。 *在这儿,我将结合对象的浅复制和深复制来说一下,首先需要了解对象深、浅复制的概念: *浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。 *深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。 */public class Property implements Cloneable,Serializable { /** * */ private static final long serialVersionUID = 1L; private String str; private SerializableObject obj; /** * 借用Object类中native的clone方法(不完全复制) */ public Object clone() throws CloneNotSupportedException{ Property proto = (Property)super.clone(); return proto; } /** * 使用流进行深度clone * @return * @throws IOException * @throws ClassNotFoundException */ public Object deepClone() 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 ois.readObject(); } public String getStr() { return str; } public void setStr(String str) { this.str = str; } public SerializableObject getObj() { return obj; } public void setObj(SerializableObject obj) { this.obj = obj; } //测试 public static void main(String[] args) { Property pro=new Property(); pro.setStr("尼玛"); try { Property ob=(Property)pro.clone(); Property oj=(Property)pro.deepClone(); System.out.println(ob.toString()); System.out.println(oj.toString()); System.out.println(ob.getStr()); System.out.println(oj.getStr()); } catch (CloneNotSupportedException e) { e.printStackTrace(); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } }}/** * 序列化对象类 * @author Administrator * */class SerializableObject implements Serializable{ /** * */ private static final long serialVersionUID = 1L;}
0 0
- java 原型设计模式
- Java原型设计模式
- java设计模式(原型模式)
- java设计模式---原型模式
- java设计模式---原型模式
- java设计模式---原型模式
- Java设计模式---原型模式
- JAVA设计模式:原型模式
- java设计模式----原型模式
- JAVA 设计模式 - 原型模式
- 《Java设计模式》 原型模式
- Java设计模式 -- 原型模式
- Java设计模式--原型模式
- Java 设计模式-原型模式
- JAVA设计模式--原型模式
- java设计模式-原型模式
- Java设计模式--原型模式
- java设计模式,原型模式
- [Python] heapq简介(转载自:http://www.cnblogs.com/lexus/p/3324991.html)
- javascript函数的声明、调用、传参和返回值
- Js获取当前日期时间及其它操作
- webP 格式图片在 iOS 中的应用
- CentOS 6.5下NFS安装配置
- java设计模式,原型模式
- LeetCode 122. Best Time to Buy and Sell Stock II
- Android 7.0 安装包修改后无法安装
- 小笔记-TIME_WAIT状态
- oracle基础语法
- 2014_shanghai_visit
- ACCP7.0 第二章 分割跳转
- object_c 如何扩写NSObject 中的performSelector 方法实现传三个以上的参数
- TCP/IP详解卷1中文版勘误表前言