当前位置: 首页 > news >正文

广东手机网站开发公司公司网站介绍范文

广东手机网站开发公司,公司网站介绍范文,建筑培训网 江苏,腾讯云 win wordpress1 基本概念 1.1 大佬文章 设计模式是什么鬼#xff08;原型#xff09; 详解设计模式#xff1a;原型模式-腾讯云开发者社区-腾讯云 1.2 知识汇总 #xff08;1#xff09;原型模式#xff1a;先 new 一个实例#xff0c;该实例符合需求#xff0c;之后再根据这个实…1 基本概念 1.1 大佬文章 设计模式是什么鬼原型 详解设计模式原型模式-腾讯云开发者社区-腾讯云 1.2 知识汇总 1原型模式先 new 一个实例该实例符合需求之后再根据这个实例为原型重复构建新的对象 2所属类型创建型模式 3作用重复创建对象 4优点可以重复获得对象的同时保持较高的性能 1.3 基本构成 1抽象原型类抽象原型类是定义具有克隆自己的方法接口是所有具体原型类的公共父类可以是抽象类也可以是接口在 Java 中 Cloneable 接口可以看作是抽象原型类 2具体原型类根据这个类可以获得一个原型对象并且这个类中需要重现 clone 方法可以根据这个 clone 方法复制对象 3访问类使用具体原型类中的 clone 方法可以不断重复的复制对象 2 Java 中的克隆 根据现有的对象复制一个新的对象的操作就是克隆Java 中克隆分为浅克隆和深克隆我个人更喜欢说浅拷贝和深拷贝浅拷贝和深拷贝的区别主要在重写 clone 方法上有所区别但是虽然之前有了解过拷贝的相关问题但是发今天发现其实这里面还是有一些细节需要注意的。 2.1 拷贝的必要条件 1实现 Cloneable 接口这个接口其实是一个标记接口想要使用 clone 方法就必须先实现这个接口否则该类的 clone 方法是不可用的。 2重写 clone 方法仅仅实现 Cloneable 接口还不能达到要求还需要重写这个方法否则依然不能使用 clone 方法 2.2 浅拷贝 浅拷贝是将某个对象的所有成员属性都赋值给 clone 得到的对象 1简单数据类型如 int 等等的数据类型直接将值拷贝过去 2非简单数据类型如引用类型的数据是将引用的地址赋值给拷贝得到的对象也就是说并没有新建一个成员对象而是简单的将引用复制一遍 package se.wangs.clonedemo.pojo;/*** -- coding: UTF-8 -- *** author wangs* date 2023/12/6 9:07* description 演示浅拷贝*/ public class Teacher {private String name;private String idNo;public String getName() {return name;}public void setName(String name) {this.name name;}public String getIdNo() {return idNo;}public void setIdNo(String idNo) {this.idNo idNo;} } package se.wangs.clonedemo.pojo;/*** -- coding: UTF-8 -- *** author wangs* date 2023/12/6 9:08* description 演示clone*/ public class Student implements Cloneable{private String idNo;private String name;private Teacher teacher;public String getIdNo() {return idNo;}public void setIdNo(String idNo) {this.idNo idNo;}public String getName() {return name;}public void setName(String name) {this.name name;}public Teacher getTeacher() {return teacher;}public void setTeacher(Teacher teacher) {this.teacher teacher;}Overridepublic Student clone() {try {Student clone (Student) super.clone();// TODO: copy mutable state here, so the clone cant change the internals of the originalreturn clone;} catch (CloneNotSupportedException e) {throw new AssertionError();}} } package se.wangs.clonedemo;import se.wangs.clonedemo.pojo.Student; import se.wangs.clonedemo.pojo.Teacher;/*** -- coding: UTF-8 -- *** author wangs* date 2023/12/4 16:37* description 浅拷贝*/ public class ShallowClone {public static void main(String[] args) {Teacher teacher1 new Teacher();teacher1.setIdNo(001);teacher1.setName(teacher_001);Student student1 new Student();student1.setIdNo(101);student1.setName(student_101);student1.setTeacher(teacher1);Student cloneStudent student1.clone();System.out.println(---------------------------);System.out.println(student1);System.out.println(idNo student1.getIdNo());System.out.println(name student1.getName());System.out.println(teacher student1.getTeacher());System.out.println(---------------------------);System.out.println(cloneStudent);System.out.println(idNo cloneStudent.getIdNo());System.out.println(name cloneStudent.getName());System.out.println(teacher cloneStudent.getTeacher());} } 运行测试类得到的结果如下 --------------------------- se.wangs.clonedemo.pojo.Student41629346 idNo 101 name student_101 teacher se.wangs.clonedemo.pojo.Teacher214c265e --------------------------- se.wangs.clonedemo.pojo.Student448139f0 idNo 101 name student_101 teacher se.wangs.clonedemo.pojo.Teacher214c265e 说明 student1原对象cloneStudent浅拷贝得到的对象 可以看到student 中有一个引用类型的成员变量 teacher浅拷贝得到的 cloneStudent 中的 teacher 变量与 student1 指向的对象相同 2.3 深拷贝 深拷贝就是会将引用类型的变量做进一步处理clone 出的对象的引用数据类型的成员变量会指向一个新的变量 package se.wangs.clonedemo.pojo;/*** -- coding: UTF-8 -- *** author wangs* date 2023/12/6 9:07* description 演示浅拷贝*/ public class Teacher implements Cloneable{private String name;private String idNo;public String getName() {return name;}public void setName(String name) {this.name name;}public String getIdNo() {return idNo;}public void setIdNo(String idNo) {this.idNo idNo;}Overridepublic Teacher clone() {try {Teacher clone (Teacher) super.clone();// TODO: copy mutable state here, so the clone cant change the internals of the originalreturn clone;} catch (CloneNotSupportedException e) {throw new AssertionError();}} } package se.wangs.clonedemo.pojo;/*** -- coding: UTF-8 -- *** author wangs* date 2023/12/6 9:08* description 演示clone*/ public class Student implements Cloneable{private String idNo;private String name;private Teacher teacher;public String getIdNo() {return idNo;}public void setIdNo(String idNo) {this.idNo idNo;}public String getName() {return name;}public void setName(String name) {this.name name;}public Teacher getTeacher() {return teacher;}public void setTeacher(Teacher teacher) {this.teacher teacher;}Overridepublic Student clone() {try {Student clone (Student) super.clone();// 获得原来的 teacher 对象并clone出一个新的teacher对象Teacher newTeacher clone.getTeacher().clone();// 重新设置teacherclone.setTeacher(newTeacher);return clone;} catch (CloneNotSupportedException e) {throw new AssertionError();}} } package se.wangs.clonedemo;import se.wangs.clonedemo.pojo.Student; import se.wangs.clonedemo.pojo.Teacher;/*** -- coding: UTF-8 -- *** author wangs* date 2023/12/6 10:09* description 深拷贝*/ public class DeepClone {public static void main(String[] args) {Teacher teacher1 new Teacher();teacher1.setIdNo(001);teacher1.setName(teacher_001);Student student1 new Student();student1.setIdNo(101);student1.setName(student_101);student1.setTeacher(teacher1);Student cloneStudent student1.clone();System.out.println(---------------------------);System.out.println(student1);System.out.println(idNo student1.getIdNo());System.out.println(name student1.getName());System.out.println(teacher student1.getTeacher());System.out.println(---------------------------);System.out.println(cloneStudent);System.out.println(idNo cloneStudent.getIdNo());System.out.println(name cloneStudent.getName());System.out.println(teacher cloneStudent.getTeacher());} } 运行得到 --------------------------- se.wangs.clonedemo.pojo.Student41629346 idNo 101 name student_101 teacher se.wangs.clonedemo.pojo.Teacher214c265e --------------------------- se.wangs.clonedemo.pojo.Student448139f0 idNo 101 name student_101 teacher se.wangs.clonedemo.pojo.Teacher7cca494b 可以看到得到的 teacher 对象的地址变了 2.4 总结 浅拷贝和深拷贝的主要区别就是对引用类型的变量的处理 1浅拷贝引用类型的变量拷贝前后指向同一个对象 2深拷贝引用类型的变量拷贝后指向新的对象 3核心重写 clone 方法时对引用类型变量的处理不同 参考资料 Java深入理解深拷贝和浅拷贝区别_java深拷贝浅拷贝-CSDN博客 3 原型设计模式 3.1 设计模式体验 1抽象原型类Cloneable 接口 2具体原型类可以 new 原型实例实现 Cloneable 接口重写了 clone() 方法 package se.wangs.prototype;/*** -- coding: UTF-8 -- *** author wangs* date 2023/12/6 9:07* description*/ public class Teacher implements Cloneable{private String name;private String idNo;public String getName() {return name;}public void setName(String name) {this.name name;}public String getIdNo() {return idNo;}public void setIdNo(String idNo) {this.idNo idNo;}Overridepublic Teacher clone() {try {Teacher clone (Teacher) super.clone();// TODO: copy mutable state here, so the clone cant change the internals of the originalreturn clone;} catch (CloneNotSupportedException e) {throw new AssertionError();}} } package se.wangs.prototype;/*** -- coding: UTF-8 -- *** author wangs* date 2023/12/6 9:08* description 具体原型类*/ public class Student implements Cloneable{private String idNo;private String name;private Teacher teacher;public String getIdNo() {return idNo;}public void setIdNo(String idNo) {this.idNo idNo;}public String getName() {return name;}public void setName(String name) {this.name name;}public Teacher getTeacher() {return teacher;}public void setTeacher(Teacher teacher) {this.teacher teacher;}Overridepublic Student clone() {try {Student clone (Student) super.clone();// 获得原来的 teacher 对象并clone出一个新的teacher对象Teacher newTeacher clone.getTeacher().clone();// 重新设置teacherclone.setTeacher(newTeacher);return clone;} catch (CloneNotSupportedException e) {throw new AssertionError();}} }3访问类实例化原型通过 clone 复制原型对象 package se.wangs.prototype;/*** -- coding: UTF-8 -- *** author wangs* date 2023/12/6 10:30* description 访问类*/ public class Client {public static void main(String[] args) {Teacher teacher new Teacher();teacher.setName(okay);teacher.setIdNo(0001);Student student new Student();student.setIdNo(stu_001);student.setName(onesun);student.setTeacher(teacher);System.out.println(---------------------------);System.out.println(student);System.out.println(idNo student.getIdNo());System.out.println(name student.getName());System.out.println(teacher student.getTeacher());for (int i 0; i 10; i) {System.out.println(---------------------------);Student cloneStudent student.clone();System.out.println(cloneStudent);System.out.println(idNo cloneStudent.getIdNo());System.out.println(name cloneStudent.getName());System.out.println(teacher cloneStudent.getTeacher());}} } 3.2 总结 1原型设计模式的思想就是拿到一个对象将该对象当作一个标准然后使用 clone 方法不断重复的去复制这个标准原型对象从而得到大量同类型的对象在游戏等等场景中应用广泛。 2使用原型模式而不是 new 对象的优点是节约 new 需要消耗的资源提高系统的性能。 3原型模式的应用 Spring 框架对 bean 对象进行管理而默认的 bean 对象是单例模式的也可以使用 scope 属性指定为非单例模式当 scope 属性为socpeprototype时就是非单例模式其实这里使用的就是原型模式
http://www.w-s-a.com/news/319948/

相关文章:

  • 韶关网站开发网站建设任务分解
  • 网站建设核心点阿根廷网站后缀
  • 哪些网站可以做招商广告语学校官网页面设计
  • 十堰城市建设网站网站开发流程宜春
  • 内江网站建设郑州网站优化外包
  • 土地流转网站建设项目云南抖音推广
  • 建设银行网站无法打开2021年有没有人给个网站
  • 高端手机网站建设网站建设岗位绩效
  • 泰安网络推广 网站建设 网站优化免费素材网站psd
  • 做企业网站联系网站开发具体的工作内容
  • 联合易网北京网站建设公司怎么样网站页面开发流程
  • 2015做那些网站能致富网站建设审批表
  • 深圳 网站设计个人名片模板
  • 网站建设费用选网络专业网站在线推广
  • 天津建设网站c2成绩查询用记事本制作html网页代码
  • 织梦二次开发手机网站如何成为一名设计师
  • 网站公司建设网站镇江本地网站
  • 网页设计后面是网站建设吗凡客诚品的配送方式
  • 万链网站做的怎么样?深圳门户网站开发
  • 在线设计工具的网站怎么做wordpress多语言版本号
  • 建设购物网站要求优秀网站大全
  • 平顶山做网站公司用源码网站好优化吗
  • 网上电商游戏优化大师手机版
  • 个人微信公众号怎么做微网站吗网站域名需要续费吗
  • 有效的网站建设公丹阳做网站的
  • 哪些行业做网站的多学企业网站开发
  • 外贸seo网站制作网站备案的流程
  • 网站布局教程wordpress 侧边栏位置
  • 谁有手机网站啊介绍一下dedecms 网站重复文章
  • 博客网站快速排名微信机器人免费版wordpress