码迷,mamicode.com
首页 > 其他好文 > 详细

05 【创建型】原型模式 理解克隆对象~

时间:2019-11-05 23:17:54      阅读:176      评论:0      收藏:0      [点我收藏+]

标签:info   ati   i++   创建型   一个   ret   sign   开始   getname   

原型模式(克隆对象)


 

用于创建重复的对象,用克隆对象的方式代替new 关键字的使用。

就好比细胞分裂,最开始的一个细胞通过自我复制,分裂成两个。两个分裂成四个,依次指数增长

这里就涉及到一个概念,就是创建重复的对象,就好比细胞分裂的时候就是在重复创建对象,我们可以让对象实现Cloneable接口

通过父类的clone() 方法进行创建相同的对象,这里的相同是指有相同的属性,但是他们在内存中却有不同的引用存在

技术图片

 

 

代码理解


 

对象实现Cloneable 重写父类的clone方法

public class Student implements Cloneable {

    private String id;

    private String name;

    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }


    public Object clone() {
        Object clone = null;
        try {
            clone = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return clone;
    }

}

 

//测试 分别用new的方式与clone的方式 创建100个相同的对象需要的毫秒数

public static void main(String[] args) {

        long start = System.currentTimeMillis();
        System.out.println(start);

        for (int i = 0;i<100;i++) {

            Student student = new Student();
            student.setId("1");
            student.setName("mrc");

            System.out.println(student.getId());
            System.out.println(student.getName());
        }

        long end = System.currentTimeMillis();
        System.out.println(end);

        System.out.println("总耗时:"+(end-start));


    }

技术图片

 

 

//通过克隆的方式创造相同的对象进行测试

public static void main(String[] args) {

        long start = System.currentTimeMillis();
        System.out.println(start);

        Student student = new Student();
        student.setId("1");
        student.setName("mrc");

        for (int i = 0;i<100;i++) {

            Student student1 = (Student) student.clone();

            System.out.println(student1.getId());
            System.out.println(student1.getName());
        }

        long end = System.currentTimeMillis();
        System.out.println(end);

        System.out.println("总耗时:"+(end-start));


    }

技术图片

果然,性能上还是存在微小的差距的。

总结


 

原型模式,简单的理解就是用于创建重复对象时候,对减少new关键字的使用而存在的一个设计模式,它的好处在于能够快速创建相同的对象。

 缺点就在于:需要被克隆的对象需要实现Cloneable接口,对于全局我们需要考虑,不能一味的实现。还是得全局考虑。合适才是最重要的

 

参考:https://www.runoob.com/design-pattern/prototype-pattern.html

码云:https://gitee.com/mrc1999/23GOF

 

 

05 【创建型】原型模式 理解克隆对象~

标签:info   ati   i++   创建型   一个   ret   sign   开始   getname   

原文地址:https://www.cnblogs.com/ChromeT/p/11802412.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!