hooyantsing's Blog

P50 原型模式(2)-克隆羊

字数统计: 282阅读时长: 1 min
2020/11/09

尚硅谷Java设计模式(图解+框架源码剖析)

原型模式 Prototype

  1. 每次返回一个被复制对象的新对象。
  2. bean类实现Cloneable接口,重写Object的clone()方法,即称为原型模式。
  3. 如果clone()方法重写仅是调用super.clone()方法,也就是使用父类(Object)的方法,即为浅拷贝
  4. 如果bean类的成员变量存在引用变量,请使用深拷贝

以下案例为浅拷贝:

1
2
3
4
5
6
7
8
9
10
11
public class Sheep implements Cloneable{
private String name;
private int age;
private String color;
// getter setter toSting

@Override
protected Object clone() throws CloneNotSupportedException {
return super.clone();
}
}

获取新的拷贝对象:

1
2
3
4
5
6
7
public class Test{
public static void main(String[] args) throws CloneNotSupportedException {
Sheep sheep = new Sheep("tom",1,"白色");
// Sheep是原型模式,因此直接通过clone()方法获取到新对象。
Sheep sheep1 = (Sheep) sheep.clone();
}
}

两个对象并不是同一个对象:

1
2
System.out.println(sheep.hashCode());
System.out.println(sheep1.hashCode());

执行结果:

1163157884
1956725890

单例模式和原型模式

单例模式仅存在唯一对象,每次返回都是它自己。

原型模式可以复制,每次返回一个克隆的新对象。

CATALOG
  1. 1. 原型模式 Prototype
  2. 2. 单例模式和原型模式