设计模式 - 原型模式
November 29, 2019
1706
设计模式 -原型模式 (Prototype)
一、基本介绍
- 原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
- 原型模式是一个创建型设计模式,允许一个对象再创建另外一个可定制的对象,不需要知道创建的细节
- 工作原理:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来进行创建,
对象.clone()
二、注意事项
浅拷贝
浅拷贝 只对 基本数据类型其真正的拷贝作用,对于引用类型来说的话,只是简单的对引用类型地址进行了拷贝,即使进行了多次的浅拷贝,多个对象中地引用类型还是指的同一个
深拷贝
深拷贝用来解决浅拷贝问题
深拷贝实现方式:
方式一:重写 clone 方法进行实现深拷贝
1
super.clone()方式二:通过对象序列化进行深拷贝
推荐使用1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34public Object deepClone() {
ByteArrayOutputStream byteArrayOutputStream = null;
ObjectOutputStream objectOutputStream = null;
ByteArrayInputStream byteArrayInputStream = null;
ObjectInputStream objectInputStream = null;
try {
byteArrayOutputStream = new ByteArrayOutputStream();
objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
objectOutputStream.writeObject(this);
byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());
objectInputStream = new ObjectInputStream(byteArrayInputStream);
SpringDemo springDemo = (SpringDemo) objectInputStream.readObject();
return springDemo;
} catch (IOException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}finally {
try {
byteArrayInputStream.close();
byteArrayInputStream.close();
objectOutputStream.close();
byteArrayInputStream.close();
} catch (IOException e) {
e.printStackTrace();
}
}
return null;
}
- 本文作者:Jun
- 本文链接:http://mambajun.github.io/2019/11/29/%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F-%E5%8E%9F%E5%9E%8B%E6%A8%A1%E5%BC%8F/index.html
- 版权声明:本博客所有文章均采用 BY-NC-SA 许可协议,转载请注明出处!