java

关注公众号 jb51net

关闭
首页 > 软件编程 > java > Java原型模式

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

作者:温故知新之java

原型模式(Prototype Pattern)指使用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。本文将通过案例详细讲解一下原型模式,感兴趣的可以了解一下

定义

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 即实现了一个原型接口,该接口用于创建当前对象的克隆,当直接创建对象的代价比较大时,则采用这种模式

案例

需求

张三要打印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.如果一个对象初始化太过繁琐

到此这篇关于Java设计模式之原型模式的示例详解的文章就介绍到这了,更多相关Java原型模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

您可能感兴趣的文章:
阅读全文