多平台统一管理软件接口,如何实现多平台统一管理软件接口
258
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小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~