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

建设银行公积金查询网站首页南昌seo管理

建设银行公积金查询网站首页,南昌seo管理,网站设置为信任站点,怎么做网页txt文章目录 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/352744.html

相关文章:

  • 设计高端网站网页推广平台
  • 做泌尿科网站价格公司专业网站建设
  • 厦门企业网站制作南宁网站制作
  • 网站建设师要求优化大师官方免费下载
  • wordpress 仪表盘自定义广东seo推广费用
  • 网站建设考试样题及答案商丘seo外包
  • 如何利用网络平台挣钱武汉标兵seo
  • 临漳手机网站建设免费网站生成器
  • 国外品牌网站文军seo
  • dedecms部署两个网站网络推广外包哪个公司做的比较好
  • 重庆线上推广软件网站查询工具seo
  • 咚咚抢网站怎么做的请简述网络营销的特点
  • 营销网站建设选择原则漳州seo网站快速排名
  • 建设报名系统是正规网站吗中国万网官网登录
  • 建设厅网站实名制系统如何解聘万能软文模板
  • 为什么要建设网站企业查询网
  • 东莞建网站公司自己如何做链接推广
  • 自建网站营销是什么引流推广平台有哪些
  • 电子商务网站建设的规划方案广州seo好找工作吗
  • 南京做公司网站的公司做营销型网站的公司
  • 企业网站管理系统项目文档即刻搜索引擎入口
  • 多视频网站建设谷歌seo服务商
  • 十堰seo优化分析谷歌seo综合查询
  • cms网站代理郑州网站建设价格
  • 网站被墙检测指数基金
  • 淘宝网站可以做seo吗百度seo排名优化技巧分享
  • 郑州企业网站建设团队百度竞价排名公式
  • 如何做移动支付网站企业管理培训视频免费
  • 有人知道网站怎么做吗营销型网站建站推广
  • 网站制作视频教程全套产品软文怎么写