Java设计模式(5)创建型:原型模式
来源:互联网 发布:淘宝 男装 原单 编辑:程序博客网 时间:2024/05/20 21:59
(一)模式概念
原型模式是指用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节。工作原理:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
原型模式主要面对的问题是:某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。
原型模式有两种拷贝情况:浅复制和深复制。
1)浅复制:将一个对象复制后,基本数据类型的变量都会重新创建,而引用类型,指向的还是原对象所指向的。
2)深复制:将一个对象复制后,不论是基本数据类型还有引用类型,都是重新创建的。
现在重新来了解一下基本数据类型和引用数据类型:
基本数据类型 8种:
整型:byte 1字节short 2 字节int 4 字节long 8 字节浮点型:float 4 字节double 8 字节Unicode编码的字符单元char 2 字节真值类型boolean 1 位引用数据类型 3种:
类class 接口interface 数组array
(二)Demo
1)浅复制
NativePrototype类原型实例,需实现Cloneable 接口:
public class NativePrototype implements Cloneable {public int i = 0; // 基本类型public int t = 0; // 基本类型public LinkedList<Integer> list = new LinkedList<Integer>(); // 引用类型public Object clone() throws CloneNotSupportedException {NativePrototype proto = (NativePrototype) super.clone();return proto;}}执行代码:
// 浅复制NativePrototype np = new NativePrototype();np.i = 10;np.list.add(10);np.t = 10;NativePrototype npclone = (NativePrototype) np.clone();np.list.add(11);System.out.println(npclone.i);System.out.println(npclone.list);System.out.println(npclone.t);
执行结果:
10[10, 11]10
SerializablePrototype类原型实例,需实现Serializable接口:
public class SerializablePrototype implements Serializable {private static final long serialVersionUID = 1L;public int i = 0; // 基本类型public transient int t = 0;// transient关键字的成员不会被序列化public LinkedList<Integer> list = new LinkedList<Integer>(); // 引用类型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();}}执行过程:
// 深复制SerializablePrototype sp = new SerializablePrototype();sp.i = 10;sp.list.add(10);sp.t = 10;SerializablePrototype spclone = (SerializablePrototype) sp.deepClone();sp.list.add(11);System.out.println(spclone.i);System.out.println(spclone.list);System.out.println(spclone.t);
执行结果:
10[10]0(注)此处System.out.println(spclone.t)的值为0是因为SerializablePrototype类中t定义时加了transient,此时复制不会把值也复制过来。
0 0
- Java设计模式(5)创建型:原型模式
- JAVA设计模式(5) —<创建型>原型模式(Prototype)
- java设计模式(创建型)之原型模式
- JAVA设计模式创建型模式之原型模式
- Java设计模式之创建型模式--原型模式
- 【设计模式】—-(5)原型模式(创建型)
- 【设计模式】创建型模式-原型模式
- 设计模式 - 创建型模式 - 原型模式
- 设计模式->创建型模式->原型模式
- java 设计模式原型模式(5)
- 设计模式--创建型模式--原型模式(Protype Pattern)
- 设计模式中创建型模式 (二):原型模式
- 设计模式:创建型模式:原型模式(prototype pattern)
- (4)设计模式之原型模式(创建型模式)
- java设计模式——创建型之原型模式
- Java设计模式_(创建型)_原型模式
- 设计模式-创建型-原型
- 创建型设计-原型模式
- Caffe学习系列(20):用训练好的caffemodel来进行分类
- matlab虚拟现实之V-Realm Builder2特别组节点使用
- 第十六周-学生信息排序
- mysql悲观锁总结和实践
- 设配问题
- Java设计模式(5)创建型:原型模式
- 树状数组详解
- Android中WebView的使用
- 分页
- STL--stack
- ueditor编辑器与springmvc整合使用
- selenium之 关闭窗口close与quit
- php实现页面静态化(纯静态&&伪静态)
- Java查找算法