Java设计模式之原型模式的示例详解

网友投稿 253 2022-08-28


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.printStahttp://ckTrace();

}

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();

}

}

测试结果

对比分析

方案一:一般实现方法,使用for循环进行多次new实例化照片对象,该方案最多大的优势就是简单,容易理解;劣势就是多次使用new关键字,频繁的进行内存分配等,如果量大到一定的程度,性能会非常差方案二:原型模式实现方法,要实例化多次的类实现Cloneable,重写clone方法,使用for循环重复调用clone方法进行多次实例化,即是在内存中使用拷贝的方式进行创建对象,性能比new关键字会高很多

总结

通过以上两个方案的耗时比较,我们可以发现使用原型模式创建对象性能最优,所以在以下场景中我们可以选择使用原型模式:

1.当需要一个类的大量对象的时候

2.如果一个对象初始化太过繁琐


版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:python之selenium操作下拉滚动条方法 || selenium之页面滚动至页面底部的数种解决方案(java selenium处理内嵌滚动条)
下一篇:Python解释器和注释(Python用什么注释)
相关文章

 发表评论

暂时没有评论,来抢沙发吧~