时间:2022-08-03 12:21:05 | 栏目:JAVA代码 | 点击:次
用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 即实现了一个原型接口,该接口用于创建当前对象的克隆,当直接创建对象的代价比较大时,则采用这种模式
张三要打印100000份照片
定义照片类
/** * 照片类 * @author:liyajie * @createTime:2022/2/15 11:47 * @version:1.0 */ @Data @AllArgsConstructor public class Photo { private String name; private String type; private int size; }
定义客户端类
/** * 客户端 * @author:liyajie * @createTime:2022/2/15 11:49 * @version:1.0 */ public class Client { public void printPhoto(){ Photo photo = new Photo("张三","彩色",2); for (int i = 0; i < 100000; i++) { Photo clone = new Photo(photo.getName(),photo.getType(),photo.getSize()); System.out.println(clone); } } }
定义测试类
/** * 测试类 * @author:liyajie * @createTime:2022/2/15 11:51 * @version:1.0 */ public class Test { public static void main(String[] args) { Client client = new Client(); client.printPhoto(); } }
测试结果
定义照片类
/** * 照片类 * @author:liyajie * @createTime:2022/2/15 11:47 * @version:1.0 */ @Data @AllArgsConstructor public class PhotoNew implements Cloneable{ private String name; private String type; private int size; @Override protected PhotoNew clone() { PhotoNew clone = null; try { clone = (PhotoNew)super.clone(); }catch (Exception e){ e.printStackTrace(); } return clone; } }
定义客户端类
/** * 客户端 * @author:liyajie * @createTime:2022/2/15 11:49 * @version:1.0 */ public class ClientNew { public void printPhoto(){ PhotoNew photoNew = new PhotoNew("张三","彩色",2); for (int i = 0; i < 100000; i++) { PhotoNew clone = photoNew.clone(); System.out.println(clone); } } }
定义测试类
/** * 测试类 * @author:liyajie * @createTime:2022/2/15 11:51 * @version:1.0 */ public class TestNew { public static void main(String[] args) { ClientNew clientNew = new ClientNew(); clientNew.printPhoto(); } }
测试结果
通过以上两个方案的耗时比较,我们可以发现使用原型模式创建对象性能最优,所以在以下场景中我们可以选择使用原型模式:
1.当需要一个类的大量对象的时候
2.如果一个对象初始化太过繁琐