LunarRoom

原型模式

字数统计: 245阅读时长: 1 min
2020/05/07 Share

原型模式

原型模式主要介绍了java中cloneable接口的应用。在Java中,对象的直接等于”=”重载了C/C++中的引用,改变一个类会引起另一类的变化,即浅拷贝。而实现了cloneable接口的类,可以通过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
public class SimpleObject implements Cloneable
{
private String str;

public SimpleObject()
{
System.out.println("Enter SimpleObject.constructor()");
}

public String getStr()
{
return str;
}

public void setStr(String str)
{
this.str = str;
}

public Object clone() throws CloneNotSupportedException
{
return super.clone();
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
public static void main(String[] args) throws Exception
{
SimpleObject so0 = new SimpleObject();
so0.setStr("111");
SimpleObject so1 = (SimpleObject)so0.clone();

System.out.println("so0 == so1?" + (so0 == so1));
System.out.println("so0.getClass() == so1.getClass()?" + (so0.getClass() == so1.getClass()));
System.out.println("so0.equals(so1)?" + (so0.equals(so1)));

so1.setStr("222");
System.out.println("so0.getStr():" + so0.getStr());
System.out.println("so1.getStr():" + so1.getStr());
}

//运行结果
Enter SimpleObject.constructor()
so0 == so1?false
so0.getClass() == so1.getClass()?true
so0.equals(so1)?false
so0.getStr():111
so1.getStr():222

Tip:克隆一个对象并不会调用对象的构造方法。

CATALOG
  1. 1. 原型模式