Java原型模式--拷贝

news/2024/7/16 7:01:10
package com.xianyu.prototype;

import java.util.Date;

/**
 * @author xianyu
 * @version 1.0
 * @date 2020/3/15 21:36
 * 复制视频源文件
 * 1. 实现一个接口
 * 2. 重写一个方法
 */
public class Video implements Cloneable{  // 实现一个接口

    private String name;
    private Date createTime;

//    @Override  // 重写一个方法,这个是浅拷贝
//    protected Object clone() throws CloneNotSupportedException {
//        return super.clone();
//    }


    @Override   // 重写一个方法,这个是深拷贝,我们希望的理想状态
    protected Object clone() throws CloneNotSupportedException {
        Video v = (Video)super.clone();

        v.createTime = (Date) this.createTime.clone();


        return v;
    }

    public Video() {
    }

    public Video(String name, Date createTime) {
        this.name = name;
        this.createTime = createTime;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public Date getCreateTime() {
        return createTime;
    }

    public void setCreateTime(Date createTime) {
        this.createTime = createTime;
    }

    @Override
    public String toString() {
        return "video{" +
                "name='" + name + '\'' +
                ", createTime=" + createTime +
                '}';
    }
}

package com.xianyu.prototype;

import java.util.Date;

/**
 * @author xianyu
 * @version 1.0
 * @date 2020/3/15 21:33
 * 原型模式:以某些对象为原型,克隆出来新的对象
 */
public class Program {

    public static void main(String[] args) throws CloneNotSupportedException {

        // 现有客户端想要克隆这个视频

        Date date = new Date();
        // 原型对象
        Video v1 = new Video("Java原型设计模式",date);

        System.out.println("v1--->" + v1);
        System.out.println("v1-hashcode--->" + v1.hashCode());



        // v1克隆v2,v1 和 v2是两个不同的对象,但是内容是一样的
        Video v2 = (Video) v1.clone();  // 通过v1克隆成v2
        System.out.println("v2--->" + v2);
        System.out.println("v2-hashcode--->" + v2.hashCode());

        System.out.println("****************************");

        date.setTime(2134113);
        System.out.println("v1--->" + v1);
        System.out.println("v2--->" + v2);

    }
}




在这里插入图片描述


http://www.niftyadmin.cn/n/1791007.html

相关文章

GPA低于2.0被开除

GPA低于2.0被开除( Q 575121832) GPA太低会被开除吗? GPA是衡量学生学术水平的一个重要指标。一般而言,如果连续两学期,本科生的GPA达不到2.0、研究生的GPA达不到3.0,都有可能面临被学校劝退或开除的情况。…

5294 挖地雷

5294 挖地雷 时间限制: 1 s 空间限制: 1000 KB题目等级 : 黄金 Gold题目描述 Description在一个地图上有N个地窖&#xff08;N<20&#xff09;&#xff0c;每个地窖中埋有一定数量的地雷。同时&#xff0c;给出地窖之间的连接路径。当地窖及其连接的数据给出之后&#xff0c…

sysbench的框架实现介绍

sysbench是一个非常经典的综合性能测试工具&#xff0c;它支持CPU&#xff0c;IO&#xff0c;内存&#xff0c;尤其是数据库的性能测试。那它是怎么做到通用性的呢&#xff0c;总结一句话是大量运用了重载的方法。 sysbench总体架构 sysbench是一个总体框架&#xff0c;它用来操…

Appium Android Bootstrap源代码分析之简单介绍

在上一个系列中我们分析了UiAutomator的核心源代码&#xff0c;对UiAutomator是怎么执行的原理有了根本的了解。今天我们会開始另外一个在安卓平台上基于UiAutomator的新起之秀--Appium的源代码分析之旅。本文在真个系列中会扮演一个简单介绍的角色&#xff0c;不会分析不论什么…

Friedman test 和 Bonferroni-Dunn test 整理

Friedman test 和 Bonferroni-Dunn test 是作者写论文时遇到的,经查阅相关文献&#xff0c;内容整理如下&#xff0c;如有错误&#xff0c;还望指正。

webservice接口与HTTP接口学习笔记

一、webservice 的概念 Web 是使应用程序可以与平台和编程语言无关的方式进行相互通信的一项技术。Web 服务是一个软件接口&#xff0c;它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作。它使用基于 XML 语言的协议来描述要执行的操作或者要与另一个 Web 服务交换…

公司某项眼下端技术积累

最佳实践 BootStrap jquery jquery插件 sea.js/require.js Grunt 前期技术选型 BootStrap Backbone.js require.js jquery插件ExtJSAngular.jsBootStrap jquery jquery插件前端技术选型总结&#xff1a; 之所以选择 BootStrap jquery jquery插件 的原因是由于ExtJS或…

Python学习【第18篇】:进程理论基础

进程理论基础背景知识 顾名思义&#xff0c;进程即一个软件正在进行的过程。进程是对正在运行程序的一个抽象。 进程的概念起源于操作系统&#xff0c;是操作系统最核心的概念&#xff0c;也是操作系统提供的最古老的也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕…