首页 > 其他分享 >06-原型模式

06-原型模式

时间:2023-01-19 09:44:46浏览次数:39  
标签:06 String Resume clone resume 模式 原型 private 拷贝

06-原型模式

概念

原型模式,不知道为啥叫这个名字,直接叫克隆模式不比原型模式顾名思义的多?
主要涉及的知识就是深拷贝和浅拷贝
浅拷贝是值直接复制拷贝。对象的话是拷贝了一份地址的值,指向的还是同一个对象

实现

package com.gof.proto;

import lombok.Data;

/**
 * 功能描述
 *
 * @since 2023-01-19
 */
@Data
public class Resume implements Cloneable {
    private String name;

    private String age;

    private String sex;

    private WorkExperience workExperience;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        // 浅拷贝
        // return super.clone();

        // 深拷贝
        Resume resume = (Resume) super.clone();
        resume.setWorkExperience((WorkExperience) resume.getWorkExperience().clone());
        return resume;
    }

    @Override
    public String toString() {
        return "Resume{" + "name='" + name + '\'' + ", age='" + age + '\'' + ", sex='" + sex + '\''
            + ", workExperience=" + workExperience + '}';
    }
}
package com.gof.proto;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

/**
 * 功能描述
 *
 * @since 2023-01-19
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class WorkExperience implements Cloneable {
    private String datetime;

    private String experience;

    @Override
    protected Object clone() throws CloneNotSupportedException {
        return super.clone();
    }
}
package com.gof.proto;

/**
 * 功能描述
 *
 * @since 2023-01-19
 */
public class Client {
    public static void main(String[] args) throws CloneNotSupportedException {
        Resume resume = new Resume();
        resume.setName("dream");
        resume.setAge("18");
        WorkExperience experience = new WorkExperience("2023", "asdfasdf");
        resume.setWorkExperience(experience);

        Resume resume1 = (Resume) resume.clone();
        resume.setName("dream1");
        resume.setAge("19");
        System.out.println(resume);
        System.out.println(resume1);
        System.out.println(resume.getWorkExperience() == resume1.getWorkExperience()); // 浅拷贝:true 深拷贝:false 
        System.out.println(resume.getWorkExperience().equals(resume1.getWorkExperience()));// 浅拷贝:true 深拷贝:true 
    }
}

标签:06,String,Resume,clone,resume,模式,原型,private,拷贝
From: https://www.cnblogs.com/Oh-mydream/p/17061076.html

相关文章

  • 算法刷题 Day 18 | 513.找树左下角的值 112.路径总和 106.从中序与后序遍历序列构造二
    今日内容找树左下角的值路径总和113.路径总和ii从中序与后序遍历序列构造二叉树105.从前序与中序遍历序列构造二叉树详细布置找树左下角的值本地递归偏......
  • JavaScript学习笔记—原型对象
    1.访问一个对象的原型对象(1)对象.__proto__(2)Object.getPrototypeOf(对象)一般用第二种,第一种不安全2.原型对象中的数据(1)对象中的数据(属性、方法等)(2)constructor(对象......
  • 单例模式类为什么需要用sealed关键字修饰?
    使用单例设计模式,需要确保在任何给定的时间点对于整个应用程序只有一个特定类的实例可用。使用私有构造函数,可以避免类在外部被实例化,但是却无法避免内部类(嵌套类)的继承,如......
  • 华为云服务治理 | 微服务常见故障模式
    ​服务治理定义​服务治理通常是指通过限流、熔断等手段,保障微服务的可靠运行,即运行时治理。更加宽泛的服务治理还包括微服务持续集成(开源软件管理、自动化测试等),微服务部署......
  • 设计模式
    设计模式目录设计模式设计原则创建模式单例模式Singleton1.饿汉式2.懒汉式3.静态内部类方法4.枚举单例工厂模式Factory简单工厂模式工厂方法模式抽象工厂模式构造者......
  • 106 jenkins
    [root@jenkins~]#dockerpsCONTAINERIDIMAGECOMMANDCREATEDS......
  • 学习笔记——AOP-代理模式
    2023-01-18一、AOP前奏-代理模式1、手动实现动态代理环境搭建(1)基于接口实现动态代理:JDK动态代理(2)基于继承实现动态代理:Cglib、javassist动态代理2、实现动态代理的步......
  • 普林斯顿大学算法Week3:CollinearPoints共线模式识别(99分)--总结及代码
    总结(代码有详细注释)本课讲了归并排序,作业应用是排序进行共线的模式识别,java1.8中的排序用的是tim排序,结合了归并排序与插入排序,属于稳定排序:排序之后相同元素的相对......
  • 05-工厂模式与简单工厂模式
    05-工厂模式与简单工厂模式简单工厂模式计算器实现packagecom.gof.simpleFactory;/***功能描述**@since2023-01-18*/publicabstractclassOperation{......
  • Android记录 透明状态栏+固化的沉浸模式的简单实现
    代码中实现透明状态栏的方法:publicclassMainActivityextendsAppCompatActivity{privateActivityMainBinding_binding;@Overrideprotectedvoidon......