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

中元建设网站深圳H5网站开发

中元建设网站,深圳H5网站开发,图书馆网站建设建议,怎么再贴吧给自己的网站做宣传目录 基本介绍 传统方式克隆 原型模式改进 浅拷贝和深拷贝 浅拷贝的介绍 深拷贝的介绍 原型模式的注意事项和细节 基本介绍 (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/14268281/

相关文章:

  • 创建公司网站教程如何选择网站托管公司
  • 青海西宁制作网站企业做网站需要前置审批
  • 东莞外贸网站建设策划方案永久免费自助建站平台
  • 可以免费进入的网站正能量域名洛阳建站
  • 网站建设推广的10种方法阳江房产网站
  • 做美工的网站大连百度网站快速优化
  • 重庆推广网站排名价格网站备案流程
  • 莱芜网站优化公司wordpress wpautop
  • 建设银行e路通网站wordpress用户注册插件汉化
  • 安阳网站制作优化手机上免费制作ppt的软件
  • 东莞网站建设纸品包装前端网页代码模板
  • 青岛有没有做网站的监利县建设局网站
  • 电影网站源码系统免费一天赚500元游戏
  • 部门网站的开发 意义做框架模板的网站
  • 便捷网站建设价格怎么建立一个公司的网站
  • 陕西省住房和城乡建设厅网站安康市建设局网站
  • 国际时事新闻最新消息阳江网站推广优化公司
  • 选择网站建设免备案空间什么意思
  • 网站开发培训要多少钱长沙网络推广代理
  • 广东 网站建设 公司排名安徽网站排名优化公司
  • 做网站甘特图 内容龙岗住房和建设局网站官网
  • 网站建设小程序开发报价seo机构
  • 网站切换城市代码深圳四站合一网站建设电话
  • 网站未来发展规划培训心得体会800字
  • 伊利网站建设安徽企业建站系统平台
  • 网站建设人才有哪些ps软件免费下载破解中文版
  • 临沂市建设局的网站网站建设公司新报价
  • 陕西建设部网站诸城做网站的公司
  • 成都网站搭建公司哪家便宜品牌策划公司怎么样
  • 史志网站建设方案推广网址