源码时代Java干货分享|带你了解原型模式_prototype

Posted IT-source

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了源码时代Java干货分享|带你了解原型模式_prototype相关的知识,希望对你有一定的参考价值。

原型模式概述

在java中创建一个对象通过new是非常繁琐的,需要创建检查权限,做一些数据准备等等,因此也会销毁系统性能,那么想要快快速简单的创建出对象,我们可以通过原型模式实现,以某个对象为原型,显然新的对象具备原型对象的特点。new的对象采用的是默认值,而通过原型克隆的对象与原型对象存在一模一样的值。我们可以修改克隆对象的值,原型:早在js中就存在原型概念一说,是否还有印象,克隆,原至1997年英国克隆羊多利。克隆可以简单理解为复制

Java中如何实现原型模式:

首先需要克隆的对象,必须实现Cloneable接口,和clone方法。代码对象克隆是一个比较复杂的过程,但是Object为我们提供了clone方法,显然我们操作起来会方便很多

克隆我们分为浅度克隆和深度克隆:我们分别了解一下

 

代码清单:【实现接口覆写clone方法对象调用实现浅度克隆】通过对象调用clone方法实现复制一个新的对象

public class Pig implements Cloneable

       private Date birthday;

       @Override

       protected Pig clone() throws CloneNotSupportedException //浅度克隆

              Pig pig = (Pig)super.clone();

              return pig;

       

       public Date getBirthday()

              return birthday;

       

       public void setBirthday(Date birthday)

              this.birthday = birthday;

       

       public Pig()

       

测试代码:

Date datenewDate();

      

      Pig pignewPig();

      pig.setBirthday(date);

      System.out.println(pig);

      

      Pig clonepig.clone();

   System.out.println(clone);

结果:

cn.itsource.Pig@6d9c638

cn.itsource.Pig@7dc5e7b4

问题:由于是浅度克隆,所以其实原型对象和复制的对象,其实引用的同一个日期对象

代码清单:【实现接口覆写clone方法对象调用实现浅度克隆】通过对象调用clone方法实现复制一个新的对象

public class Pig implements Cloneable

       private Date birthday;

       @Override

       protected Pig clone() throws CloneNotSupportedException

              Pig pig = (Pig)super.clone();

pig.setBirthDay = this.birthDay.clone();//实现深度克隆

              return pig;

       

       public Date getBirthday()

              return birthday;

       

       public void setBirthday(Date birthday)

              this.birthday = birthday;

       

       public Pig()

       

如上代码所示:我们只需要对对象属性进行再次克隆,付给克隆对象即可

总结:实际开发中,由于自己new对象:设计的复杂读,数据准备权限减产等等,实际开发中克隆还是用的比较多。

以上是关于源码时代Java干货分享|带你了解原型模式_prototype的主要内容,如果未能解决你的问题,请参考以下文章

源码时代软测干货分享|一篇推文带你全方面了解CI/CD管道

源码时代Java干货分享|带你认识Zookeeper 分布式服务框架

源码时代干货分享|计算机概论和发展

源码时代前端干货分享|new关键字底层原理-执行过程

源码时代前端干货分享|new关键字底层原理-执行过程

源码时代Java干货分享|Jvm优化指南