赞
踩
原型(Prototype)模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。例如,Windows 操作系统的安装通常较耗时,如果复制就快了很多。在生活中复制的例子非常多,这里不一一列举了
原型模式的优点:
原型模式的缺点:
原型模式的实现方式
Cloneable
/** * @Description: 原型类 * @ClassName Prototype * @date: 2021.05.25 15:41 * @Author: zhanghang */ @Data @NoArgsConstructor @AllArgsConstructor public class Prototype implements Cloneable{ private String name; private Date createTime; // 浅克隆 @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } } // 浅克隆,发现该表date的值,v2的createDate也改变了,说明v2的值和v1的值指向了同一个地址 public class TestClone { public static void main(String[] args) throws CloneNotSupportedException { Date createTime = new Date(); Prototype v1 = new Prototype("原型类", createTime); Prototype v2 = (Prototype) v1.clone(); System.out.println("v1=>"+v1); System.out.println("v2=>"+v2); System.out.println("=================="); createTime.setTime(9786254); System.out.println("v1=>"+v1); System.out.println("v2=>"+v2); } }
深克隆
从写clone方法,将原型类中的对象也克隆一份
@Data @NoArgsConstructor @AllArgsConstructor public class Prototype implements Cloneable{ private String name; private Date createTime; @Override protected Object clone() throws CloneNotSupportedException { Prototype v = (Prototype) super.clone(); // 深克隆: // 将原型类中的对象也克隆 v.createTime = (Date) v.createTime.clone(); return v; } } public class TestClone { public static void main(String[] args) throws CloneNotSupportedException { Date createTime = new Date(); Prototype v1 = new Prototype("原型类", createTime); Prototype v2 = (Prototype) v1.clone(); System.out.println("v1=>"+v1); System.out.println("v2=>"+v2); System.out.println("=================="); createTime.setTime(9786254); System.out.println("v1=>"+v1); System.out.println("v2=>"+v2); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。