原型模式
结构
- 抽象原型类:规定了具体原型对象实现Clone方法
- 具体原型类:实现抽象原型类的Clone方法,他是可复制的对象
- 访问类:使用具体类型中的clone方法复制新的对象
类图:
深、浅克隆
示例
克隆类实现Cloneable接口,重写**clone()**方法,创建对象时,调用该方法,就会生成一个地址不同的对象
代码
1 2 3 4 5 6 7 8
| public class Dog implements Cloneable {
@Override protected Dog clone() throws CloneNotSupportedException { System.out.println("克隆了一个狗对象"); return (Dog) 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
| public class CitationTest1 { public static void main(String[] args) throws Exception { Citation c1 = new Citation(); Student stu = new Student("张三", "西安"); c1.setStu(stu);
ObjectOutputStream oos = new ObjectOutputStream(new FileOutputStream("C:\\Users\\Think\\Desktop\\b.txt")); oos.writeObject(c1); oos.close();
ObjectInputStream ois = new ObjectInputStream(new FileInputStream("C:\\Users\\Think\\Desktop\\b.txt")); Citation c2 = (Citation) ois.readObject(); Student stu1 = c2.getStu(); stu1.setName("李四");
System.out.println("stu和stu1是同一个对象?" + (stu == stu1));
c1.show(); c2.show(); } }
|