现象
工作中会遇到这样的问题:需要创建一批结构复杂的同一类对象,这时就需要考虑复杂对象创建时,对性能的影响了。
于是,就是了一个选择问题:要得到一批同一类对象,是继续用new,还是……clone?
原型模式
- 类组成
- Prototype类:就是jdk中的Cloneable接口
- ConcreatePrototype类:具体要clone的类,继承了Prototype类,也就是Cloneable接口;
至于Client端的使用类,不在此赘述。
public class Prototype implements Cloneable
{
private String str;
private int id;
public Prototype clone() throws CloneNotSupportedException
{
Prototype prototype =super.clone();
}
public void show()
{
System.out.println("原型模式:" + str + id);
}
/**getter and setter ....**/
}
/****************我是客户端***********************/
public class ClientTest
{
public static void main(String[] args)
{
Prototype org = new Prototype();
//克隆出一个新的对象
Prototype pt = org.clone();
pt.show();
org.show();
}
}
深复制与浅复制
- 复制有“深浅”之分,“浅”说的是复制对象的引用,对象只有一个;“深”是说复制对象,clone了几次,就有几个新的对象
- Java中,8种基本类型和其包装类,clone时,是深复制
- 其他类对象均为浅复制
- 由于String对象的改变(字符串内容的改变),伴随着新的String对象创建,因此虽然String对象的复制,是浅复制,但表现是却是深复制的现象