“你是我,我是你,我是我,你是你。”
这里说的原型模式,指的是对目标对象进行深拷贝,本文采用Java自带的克隆机制来实现。
目标类
首先声明个接口:
|
|
要使用Java自带的克隆机制,必须实现Cloneable这个标记接口。
接着写一个实现类(实例该类就将得到一个要拷贝的目标对象):
|
|
关键的代码在getClone()中,注释下的语句不能省略,因为clone()本身是浅拷贝,如果orange内也存在引用,则逐级调用。
引用类
代码如下:
|
|
思路和目标类的实现相同。
测试用例
|
|
拷贝一份fruit01指向的对象并声明为fruit02,调用fruit02的方法来更改内部字段原本的内容,在这里将内部指向的Orangeprototype对象的id改为了02,name改为了orange02。打印原目标对象内指向的Orangeprototype对象的id和name,仍然是1和orange01,如果将FruitImpl类中注释下的语句删除,则打印的结果是2和orange02。