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

网站建设 今晟网络免费门户网站搭建

网站建设 今晟网络,免费门户网站搭建,企业文化,域名注册成功怎么做网站目录 基本介绍 传统方式克隆 原型模式改进 浅拷贝和深拷贝 浅拷贝的介绍 深拷贝的介绍 原型模式的注意事项和细节 基本介绍 (1) 原型模式(prototype模式): 用原型实例指定创建对象的种类 并且通过拷贝这些原型 创建新的对象 (2) 原型模式是一种创建型设计模式 允许一个…目录 基本介绍 传统方式克隆 原型模式改进 浅拷贝和深拷贝 浅拷贝的介绍 深拷贝的介绍 原型模式的注意事项和细节 基本介绍 (1) 原型模式(prototype模式): 用原型实例指定创建对象的种类 并且通过拷贝这些原型 创建新的对象 (2) 原型模式是一种创建型设计模式 允许一个对象再创建另一个可定制的对象 而不需要知道如何创建的细节 (3) 工作原理: 通过将一个原型对象传给那个要发动创建的对象 这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建 即对象.clone() 传统方式克隆 (1) 优点是简单易操作 比较好理解 (2) 在创建新的对象时 总是需要重新获取原始对象的属性 如果创建的对象比较复杂时 效率较低 (3) 总是需要重新初始化对象 而不是动态地获得对象运行时的状态 不够灵活 (4)改进思路分析 java中Object类是所有类的基类 Object类提供了一个clone()方法 该方法可以将一个java对象复制一份 但是需要实现clone的java类必须要实现一个接口Cloneable 该接口表示该类能够复制且具有复制的能力--原型模式 Data NoArgsConstructor AllArgsConstructor public class Monkery {private String name;private Integer age;private String color;} 测试结果: 原型模式改进 要克隆的实例实现Cloneable接口并实现默认的clone方法 Data NoArgsConstructor AllArgsConstructor public class MonkeyClone implements Cloneable{private String name;private Integer age;private String color;//克隆该实例 使用默认的clone方法实现Overrideprotected Object clone() {MonkeyClone monkeyClone null;try {monkeyClone (MonkeyClone)super.clone();}catch (Exception e){System.out.println(e.getMessage());}return monkeyClone;} } 测试结果: 浅拷贝和深拷贝 浅拷贝的介绍 (1) 对于数据类型是基本数据类型的成员变量 浅拷贝会直接进行值传递 也就是将该属性值复制一份给新的对象 (2) 对于数据类型是引用数据类型的成员变量 比如说成员变量是某个数组 某个类的对象等 那么浅拷贝会进行引用传递 也就是只是将该成员变量的引用值(内存地址)复制一份给新的对象 因为实际上两个对象的该成员变量都指向同一个实例 在这种情况下 在一个对象中修改该成员变量的话会影响其他对象的该成员变量值 (3) 前面的克隆monkey就是浅拷贝 (4) 浅拷贝是使用默认的clone()方法来实现  monkey(MonkeyClone) super.clone(); 为MonkeyClone 添加一个MonkeryClone类型的child属性 此时这个数据类型即为引用类型 Data NoArgsConstructor AllArgsConstructor public class MonkeyClone implements Cloneable{private String name;private Integer age;private String color;private MonkeyClone child;public MonkeyClone(String name, Integer age, String color) {this.name name;this.age age;this.color color;}//克隆该实例 使用默认的clone方法实现Overrideprotected Object clone() {MonkeyClone monkeyClone null;try {monkeyClone (MonkeyClone)super.clone();}catch (Exception e){System.out.println(e.getMessage());}return monkeyClone;} } 我们接下来看引用数据类型的clone特性: 测试 我们这里可以看到,后面复制的monke它们的hashCode都是一致的,说明它们的内存地址指向的都是同一个地址 深拷贝的介绍 (1) 复制对象的所有基本数据类型的成员变量值 (2) 为所有引用数据类型的成员变量申请储存空间 并复制每个引用数据类型成员变量所引用的对象 直到该对象可达的所有对象 也就是说 对象进行深拷贝要对整个对象进行拷贝 (3) 深拷贝的实现方式1: 重写clone方法来实现深拷贝 (4) 深拷贝的实现方式2: 通过对象序列化来实现深拷贝 public class DeepCloneTarget implements Serializable,Cloneable {private String cloneName;private String cloneClass;public DeepCloneTarget(String cloneName, String cloneClass) {this.cloneName cloneName;this.cloneClass cloneClass;}Overrideprotected Object clone() throws CloneNotSupportedException {return super.clone();} } Data Accessors(chain true) public class DeepProtoType implements Serializable,Cloneable {String name; //String 属性DeepCloneTarget deepCloneTarget; //引用类型public DeepProtoType() {super();}//深拷贝 方式1 使用clone方法Overrideprotected Object clone() throws CloneNotSupportedException {Object deep null;//这里完成对基本数据类型(属性)和String的克隆deep super.clone();//对引用类型的属性 进行单独处理DeepProtoType deepProtoType (DeepProtoType) deep;deepProtoType.deepCloneTarget (DeepCloneTarget) deepCloneTarget.clone();return deepProtoType;} } 方式二: Data Accessors(chain true) public class DeepProtoType implements Serializable,Cloneable {String name; //String 属性DeepCloneTarget deepCloneTarget; //引用类型public DeepProtoType() {super();}//深拷贝 方式1 使用clone方法Overrideprotected Object clone() throws CloneNotSupportedException {Object deep null;//这里完成对基本数据类型(属性)和String的克隆deep super.clone();//对引用类型的属性 进行单独处理DeepProtoType deepProtoType (DeepProtoType) deep;deepProtoType.deepCloneTarget (DeepCloneTarget) deepCloneTarget.clone();return deepProtoType;}//深拷贝 方式2 通过对象序列化实现(推荐)public Object deepClone(){//创建流对象ByteArrayOutputStream bos null;ObjectOutputStream oos null;ByteArrayInputStream bis null;ObjectInputStream ois null;try{//序列化bos new ByteArrayOutputStream();oos new ObjectOutputStream(bos);oos.writeObject(this); //当前这个对象以对象流的方式输出//反序列化bis new ByteArrayInputStream(bos.toByteArray());ois new ObjectInputStream(bis);DeepProtoType copyObj (DeepProtoType) ois.readObject();return copyObj;}catch (Exception e){e.printStackTrace();return null;}finally {//关闭流try {bos.close();oos.close();ois.close();bis.close();}catch (Exception ee){System.out.println(ee.getMessage());}}} } 测试 原型模式的注意事项和细节 (1) 创建新的对象比较复杂时 可以利用原型模式简化对象的创建过程 同时也能够提高效率 (2) 不用初始化对象 而是动态地获得对象运行时的状态 (3) 如果原始对象发生变化(增加或者减少属性) 其他克隆对象的也会发生相应的变化 无需修改代码 (4) 在实现深克隆的时候可能需要比较复杂的代码 (5) 缺点: 需要为每一个类配备一个克隆方法 这对全新的类来说不是很难 但对已有的类进行改造时 需要修改其源码 违背了ocp原则
http://www.hkea.cn/news/14422504/

相关文章:

  • 免费推广网站入口2023企业宣传片策划方案
  • 优惠建设网站百度快照手机入口
  • 企业网站设计文档移动登录网页模板下载
  • 网站开发与技术分析三亚网站建设
  • seo整站优化外包服务为何建设银行网站无法登陆
  • 做网站意向客户国际军事新闻在哪看
  • 宜宾网站建设88sou百度手机助手app下载并安装
  • 阜阳北京网站建设WordPress文章数据表
  • 室内设计网站界面小程序排行榜
  • 太原做网站排名网站建设发展制度
  • 网站建设树状图想做网站哪个公司比较好
  • 淘宝客api同步到网站营销渠道策略怎么写
  • 二级网站收录网络舆情监测存在的问题
  • 企业型网站建设方案团购网站短信平台
  • 湖北手机版建站系统信息crm系统是什么
  • 成立网站公司需要什么中山网页设计
  • 昆明百度推广开户费用网站seo诊断工具
  • 宠物论坛网站策划书大专毕业设计模板范文
  • 北京微信网站开发费用登陆建设官方网站
  • 教人做衣服的网站游戏周边产品 做网站
  • 网站维护的内容做游戏需要学什么
  • 网站 刷流量怎么做付费网站
  • 承德网站制作公司哪家好切换国外ip的软件
  • 设计图纸网站品牌型网站制作哪
  • 网站电脑培训班附近有吗怎么做县城分类信息网站
  • 对门户网站建设的见解游戏推广平台哪个好
  • 免费网站建设自带后台管理程序我们网站在那里登陆后台系统管理
  • 泌阳县网站建设用jsp sqlserver做的购物网站
  • 怎样能注册自己的网站做桂林网站的图片大全
  • 深圳市住房建设局网站怎么打不开创艺装饰