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

建设银行公积金查询网站首页搜索自媒体平台

建设银行公积金查询网站首页,搜索自媒体平台,做网站职业咋样,网店网络营销策划方案文章目录 1.传统方式解决克隆羊问题1.问题描述2.类图3.目录结构4.代码实现1.Sheep.java2.Client.java 5.优缺点分析 2.原型模式解决克隆羊问题(浅拷贝)1.基本介绍2.类图3.目录结构4.代码实现1.Sheep.java 实现Cloneable接口的clone方法,使用原…

文章目录

    • 1.传统方式解决克隆羊问题
        • 1.问题描述
        • 2.类图
        • 3.目录结构
        • 4.代码实现
          • 1.Sheep.java
          • 2.Client.java
        • 5.优缺点分析
    • 2.原型模式解决克隆羊问题(浅拷贝)
        • 1.基本介绍
        • 2.类图
        • 3.目录结构
        • 4.代码实现
          • 1.Sheep.java 实现Cloneable接口的clone方法,使用原型模式来实现克隆
          • 2.Client.java
    • 3.原型模式在Spring框架中的源码分析
        • 1.基本介绍
        • 2.解释
    • 4.深拷贝
        • 1.默认的原型模式为浅拷贝
          • 1.在Sheep.java中添加一个引用类型的数组
          • 2.在Client.java测试克隆的羊和原来的羊的属性是不是一个数组
          • 3.结果表明,默认的原型模式克隆出来的对象,会将引用类型的属性指向原型的属性,共享内存空间,也就是浅拷贝
        • 2.浅拷贝与深拷贝
          • 1.浅拷贝
          • 2.深拷贝
    • 5.实现深拷贝的两种方式
        • 1.重写clone方法实现深拷贝
          • 1.DeepCloneableTarget.java
          • 2.Client.java
          • 3.结果
        • 2.对象序列化实现深拷贝(推荐)
          • 1.DeepCloneableTarget.java
          • 2.Client.java
          • 3.结果
        • 3.原型模式的注意事项

1.传统方式解决克隆羊问题

1.问题描述

image-20240528191716468

2.类图

image-20240528193030415

3.目录结构

image-20240528193057530

4.代码实现
1.Sheep.java
package com.sun.tradition;/*** Description:* @Author sun* @Create 2024/5/28 19:26* @Version 1.0*/
public class Sheep {private String name;private int age;private String color;public Sheep(String name, int age, String color) {this.name = name;this.age = age;this.color = color;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}@Overridepublic String toString() {return "Sheep{" +"name='" + name + '\'' +", age=" + age +", color='" + color + '\'' +'}';}
}
2.Client.java
package com.sun.tradition;/*** Description: 使用传统的方式复制十只羊* @Author sun* @Create 2024/5/28 19:26* @Version 1.0*/
public class Client {public static void main(String[] args) {Sheep sheep = new Sheep("tom", 1, "白色");Sheep sheep1 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor());Sheep sheep2 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor());Sheep sheep3 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor());Sheep sheep4 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor());Sheep sheep5 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor());Sheep sheep6 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor());Sheep sheep7 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor());Sheep sheep8 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor());Sheep sheep9 = new Sheep(sheep.getName(), sheep.getAge(), sheep.getColor());System.out.println(sheep);}
}
5.优缺点分析

image-20240528193325229

2.原型模式解决克隆羊问题(浅拷贝)

1.基本介绍

image-20240528193514436

2.类图

image-20240528193707328

3.目录结构

image-20240528194939568

4.代码实现
1.Sheep.java 实现Cloneable接口的clone方法,使用原型模式来实现克隆
package com.sun.improve;/*** Description: 实现Cloneable接口的clone方法,使用原型模式来实现克隆* @Author sun* @Create 2024/5/28 19:26* @Version 1.0*/
public class Sheep implements Cloneable{private String name;private int age;private String color;public Sheep(String name, int age, String color) {this.name = name;this.age = age;this.color = color;}public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}public String getColor() {return color;}public void setColor(String color) {this.color = color;}@Overridepublic String toString() {return "Sheep{" +"name='" + name + '\'' +", age=" + age +", color='" + color + '\'' +'}';}@Overrideprotected Sheep clone() throws CloneNotSupportedException {return (Sheep) super.clone();}
}
2.Client.java
package com.sun.improve;/*** Description: 原型模式的客户端* @Author sun* @Create 2024/5/28 19:43* @Version 1.0*/
public class Client {public static void main(String[] args) throws CloneNotSupportedException {Sheep sheep = new Sheep("tom", 1, "白色");Sheep clone = sheep.clone();Sheep clon2 = sheep.clone();Sheep clon3 = sheep.clone();Sheep clon4 = sheep.clone();System.out.println(clone);}
}

3.原型模式在Spring框架中的源码分析

1.基本介绍

image-20240528195301792

2.解释
  • 在Spring中配置一个bean的时候,有一个scope属性可以选择配置prototype(原型模式)
  • 当配置了这个参数,每次getBean的时候就相当于使用原型模式创建了一个新的对象,然后将原对象的属性浅拷贝到这个新的对象

4.深拷贝

1.默认的原型模式为浅拷贝
1.在Sheep.java中添加一个引用类型的数组

image-20240528200126230

2.在Client.java测试克隆的羊和原来的羊的属性是不是一个数组

image-20240528200435305

image-20240528200444586

3.结果表明,默认的原型模式克隆出来的对象,会将引用类型的属性指向原型的属性,共享内存空间,也就是浅拷贝
2.浅拷贝与深拷贝
1.浅拷贝

image-20240528200712243

2.深拷贝

image-20240528200759247

5.实现深拷贝的两种方式

1.重写clone方法实现深拷贝
1.DeepCloneableTarget.java
package com.sun.deepcopy01;import java.io.Serializable;/*** Description: 要被深拷贝的对象,内部含有引用类型* @Author sun* @Create 2024/5/28 20:20* @Version 1.0*/
public class DeepCloneableTarget implements Serializable, Cloneable {public static final long serialVersionUID = 1L;private String name;private int[] arr; // 引用类型需要手动拷贝一份public DeepCloneableTarget(String name, int[] arr) {this.name = name;this.arr = arr;}/*** 重写克隆方法,使当前对象可以完成深拷贝* @return* @throws CloneNotSupportedException*/@Overrideprotected DeepCloneableTarget clone() throws CloneNotSupportedException {// 首先调用一次父类的克隆方法,浅拷贝一份当前对象DeepCloneableTarget clone = (DeepCloneableTarget) super.clone();// 目前的clone对象的arr是浅拷贝,所以需要将其手动拷贝一份int[] copyArr = new int[arr.length];if (arr != null) {int j = 0;for (int i : arr) {copyArr[j ++] = i;}}// 重新设置一下拷贝后的数组clone.arr = copyArr;return clone;}public int[] getArr() {return arr;}
}
2.Client.java
package com.sun.deepcopy01;import java.util.Arrays;/*** Description: 原型模式的客户端* @Author sun* @Create 2024/5/28 19:43* @Version 1.0*/
public class Client {public static void main(String[] args) throws CloneNotSupportedException {DeepCloneableTarget deepCloneableTarget = new DeepCloneableTarget("sunxiansheng", new int[]{1, 2, 3});DeepCloneableTarget clone = deepCloneableTarget.clone();// 测试深拷贝System.out.println(deepCloneableTarget.getArr() == clone.getArr());System.out.println(Arrays.toString(deepCloneableTarget.getArr()));System.out.println(Arrays.toString(clone.getArr()));}
}
3.结果

image-20240528203539042

2.对象序列化实现深拷贝(推荐)
1.DeepCloneableTarget.java
package com.sun.deepcopy02;import java.io.*;/*** Description: 要被深拷贝的对象,内部含有引用类型* @Author sun* @Create 2024/5/28 20:20* @Version 1.0*/
public class DeepCloneableTarget implements Serializable, Cloneable {public static final long serialVersionUID = 1L;private String name;private int[] arr;public DeepCloneableTarget(String name, int[] arr) {this.name = name;this.arr = arr;}public int[] getArr() {return arr;}// 通过对象的序列化实现深拷贝public DeepCloneableTarget deepClone() {// 创建流对象ByteArrayOutputStream byteArrayOutputStream = null;ObjectOutputStream objectOutputStream = null;ByteArrayInputStream byteArrayInputStream = null;ObjectInputStream objectInputStream = null;try {// 序列化byteArrayOutputStream = new ByteArrayOutputStream();// 将字节数组输出流转换为对象输出流objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);// 将当前的对象以对象流的方式输出objectOutputStream.writeObject(this);// 反序列化byteArrayInputStream = new ByteArrayInputStream(byteArrayOutputStream.toByteArray());objectInputStream = new ObjectInputStream(byteArrayInputStream);DeepCloneableTarget copyObject = (DeepCloneableTarget) objectInputStream.readObject();return copyObject;} catch (Exception e) {e.printStackTrace();return null;} finally {// 关闭流try {if (byteArrayOutputStream != null) {byteArrayOutputStream.close();}if (objectOutputStream != null) {objectOutputStream.close();}if (byteArrayInputStream != null) {byteArrayInputStream.close();}if (objectInputStream != null) {objectInputStream.close();}} catch (IOException e) {e.printStackTrace();}}}
}
2.Client.java
package com.sun.deepcopy02;import java.util.Arrays;/*** Description: 原型模式的客户端* @Author sun* @Create 2024/5/28 19:43* @Version 1.0*/
public class Client {public static void main(String[] args) throws CloneNotSupportedException {DeepCloneableTarget deepCloneableTarget = new DeepCloneableTarget("sunxiansheng", new int[]{1, 2, 3});DeepCloneableTarget clone = deepCloneableTarget.deepClone();// 测试深拷贝System.out.println(deepCloneableTarget.getArr() == clone.getArr());System.out.println(Arrays.toString(deepCloneableTarget.getArr()));System.out.println(Arrays.toString(clone.getArr()));}
}
3.结果

image-20240528205755950

3.原型模式的注意事项

image-20240528210201837

http://www.dtcms.com/wzjs/326542.html

相关文章:

  • 网站锚文本链接怎么做冬镜seo
  • 怎么在百度搜到自己的网站公关公司一般收费标准
  • 中国 生产商全国客服热线:0511一个专门做 生意的网站文案代写收费标准
  • 海口seo网站推广影响seo排名的因素
  • 多种东莞微信网站建设网络推广是诈骗吗
  • 自己怎么做可以让百度收录的网站2022年最新十条新闻
  • 网站关键词分隔技能培训机构排名前十
  • 衡水wap网站建设深圳市前十的互联网推广公司
  • 餐饮管理东莞网站建设百度医生
  • 石家庄学校网站建设网站推广软件免费版下载
  • 诚信网站认证怎么做怎么在百度上打广告
  • 青海高端网站建设公司线下推广渠道和方式
  • 网站建设相关技术搜索引擎都有哪些
  • 网站建设注册什么公司搜索引擎优化百度
  • 传奇176网页游戏站长工具seo优化建议
  • 怎么做能上谷歌网站吗湖南网站制作公司
  • 济南资金盘网站开发公司靠谱吗东莞百度seo推广公司
  • 哪个网站做首饰批发好龙华百度快速排名
  • 比较好的免费外贸网站旅游企业seo官网分析报告
  • 深圳专业网站建设网站制作8年专注互联网搜索引擎
  • 网站开发学费搜索引擎优化的主题
  • 网站配色的方案免费网站seo排名优化
  • 建设公司网站怎么弄写一篇软文多少钱
  • 重庆网站推广团队惠州seo管理
  • 山东专业网站seo百度推广多少钱一个月
  • 网站建设详细报价百度网盘资源共享
  • 跨境电商那个网站做饰品比较好怎么在百度发帖
  • 自建网站经营者例子营销网站定制公司
  • 吉林省建设招标网站友情链接又称
  • 电商网站建设心得体会拉新平台哪个好佣金高