Java经典设计模式-创建型模式-原型模式(Prototype)
2018-01-20 00:00
696 查看
原型模式(Prototype)
该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。
说道复制对象,我将结合对象的浅复制和深复制来说一下,首先需要了解对象深、浅复制的概念:
浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。
写一个深浅复制的例子:
测试类:
运行结果:
参考资料
http://www.importnew.com/18390.html
该模式的思想就是将一个对象作为原型,对其进行复制、克隆,产生一个和原对象类似的新对象。
说道复制对象,我将结合对象的浅复制和深复制来说一下,首先需要了解对象深、浅复制的概念:
浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。简单来说,就是深复制进行了完全彻底的复制,而浅复制不彻底。
写一个深浅复制的例子:
package com.mode.create; 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 Prototype implements Cloneable, Serializable { private static final long serialVersionUID = 1L; private int base; private Integer obj; /* 浅复制 */ public Object clone() throws CloneNotSupportedException { // 因为Cloneable接口是个空接口,你可以任意定义实现类的方法名 // 如cloneA或者cloneB,因为此处的重点是super.clone()这句话 // super.clone()调用的是Object的clone()方法 // 而在Object类中,clone()是native(本地方法)的 Prototype proto = (Prototype) super.clone(); return proto; } /* 深复制 */ 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 int getBase() { return base; } public void setBase(int base) { this.base = base; } public Integer getObj() { return obj; } public void setObj(Integer obj) { this.obj = obj; } }
测试类:
package com.mode.create; import java.io.IOException; public class Test { public static void main(String[] args) throws CloneNotSupportedException, ClassNotFoundException, IOException { Prototype prototype = new Prototype(); prototype.setBase(1); prototype.setObj(new Integer(2)); /* 浅复制 */ Prototype prototype1 = (Prototype) prototype.clone(); /* 深复制 */ Prototype prototype2 = (Prototype) prototype.deepClone(); System.out.println(prototype1.getObj()==prototype1.getObj()); System.out.println(prototype1.getObj()==prototype2.getObj()); } }
运行结果:
参考资料
http://www.importnew.com/18390.html
相关文章推荐
- JAVA设计模式(5) —<创建型>原型模式(Prototype)
- Java设计模式——创建型模式——原型模式(Prototype Pattern)
- JAVA设计模式(05):创建型-原型模式(Prototype)
- JAVA设计模式(05):创建型-原型模式(Prototype)
- 【创建型模式】原型模式(Prototype)之23种java设计模式
- 设计模式(Design Pattern) - 创建型模式(Creational Pattern) - 原型模式(Prototype) - Java实现
- JAVA设计模式(05):创建型-原型模式(Prototype)
- Rhyme/Java 设计模式之原型模式prototype通过clone方法和反序列化实现深复制
- JAVA--原型模式(Prototype)--设计模式五
- Java经典设计模式之五大创建型模式(附实例和详解)
- java23种设计模式之原型模式(Prototype)
- Java经典设计模式之五大创建型模式(附实例和详解)
- java设计模式——创建型之原型模式
- JAVA设计模式(5)-原型模式 Prototype
- Java经典设计模式之五大创建型模式(附实例和详解)
- java-设计模式(创建型)-【原型模式】
- Java设计模式_(创建型)_原型模式
- Java经典设计模式之五大创建型模式(附实例和详解)
- Java经典设计模式(1):五大创建型模式(附实例和详解)
- Java设计模式:Prototype(原型)