首页 > 编程语言 >原型模式--Java实现

原型模式--Java实现

时间:2023-10-15 17:56:27浏览次数:40  
标签:Java Vector -- System vector 原型 java public out

画类图

浅克隆:

深克隆:

具体代码实现

浅克隆具体代码:

//Vector.java
package org.example.design004;

import java.lang.reflect.Array;
import java.util.Arrays;

public class Vector implements Cloneable{
    public int[] getArray() {
        return array;
    }

    public void setArray(int[] array) {
        this.array = array;
    }

    public Attachment getAttachment() {
        return attachment;
    }

    public void setAttachment(Attachment attachment) {
        this.attachment = attachment;
    }

    private int[] array;

    private Attachment attachment=null;

    public Vector(){
        this.attachment=new Attachment();
    }

    public Object clone() throws CloneNotSupportedException {
        Vector clone=null;

        clone=(Vector) super.clone();

        return clone;
    }

    public void display(){
        System.out.println(Arrays.toString(array));
    }




}

//Attachment.java
package org.example.design004;

public class Attachment {
    public void download(){
        System.out.println("复制向量");
    }
}

//Client.java
package org.example.design004;

public class Client {
    public static void main(String[] args) throws CloneNotSupportedException {
        Vector vector,copyVector;
        vector=new Vector();
        int[] arr={1,2,3,4};
        vector.setArray(arr);

        System.out.println("浅克隆复制:");

        copyVector=(Vector) vector.clone();

        System.out.print("vector:");
        vector.display();
        System.out.print("copyVector:");
        copyVector.display();

        System.out.println("vector==copyVector?");
        System.out.println(vector.getAttachment()==copyVector.getAttachment());


    }
}

深克隆具体代码:

//Vector.java
package org.example.design004;

import java.io.*;
import java.lang.reflect.Array;
import java.util.Arrays;

public class Vector implements Serializable{
    public int[] getArray() {
        return array;
    }

    public void setArray(int[] array) {
        this.array = array;
    }

    public Attachment getAttachment() {
        return attachment;
    }

    public void setAttachment(Attachment attachment) {
        this.attachment = attachment;
    }

    private int[] array;

    private Attachment attachment=null;

    public Vector(){
        this.attachment=new Attachment();
    }

    public Object deepClone() throws IOException, ClassNotFoundException {
        ByteArrayOutputStream bao=new ByteArrayOutputStream();
        ObjectOutputStream oos=new ObjectOutputStream(bao);
        oos.writeObject(this);

        ByteArrayInputStream bai=new ByteArrayInputStream(bao.toByteArray());
        ObjectInputStream ois=new ObjectInputStream(bai);
        return (ois.readObject());
    }

    public void display(){
        System.out.println(Arrays.toString(array));
    }




}

//Attachment.java
package org.example.design004;

import java.io.Serializable;

public class Attachment implements Serializable {
    public void download(){
        System.out.println("复制向量");
    }
}

//Client.java
package org.example.design004;

import java.io.IOException;

public class Client {
    public static void main(String[] args) throws CloneNotSupportedException, IOException, ClassNotFoundException {
        Vector vector,copyVector;
        vector=new Vector();
        int[] arr={1,2,3,4};
        vector.setArray(arr);

        System.out.println("深克隆复制:");

        copyVector=(Vector) vector.deepClone();

        System.out.print("vector:");
        vector.display();
        System.out.print("copyVector:");
        copyVector.display();

        System.out.println("vector==copyVector?");
        System.out.println(vector.getAttachment()==copyVector.getAttachment());


    }
}

标签:Java,Vector,--,System,vector,原型,java,public,out
From: https://www.cnblogs.com/liuzijin/p/17763817.html

相关文章

  • UML中的关系
    目录类和接口的关系实现(enable)对象和对象的关系继承(is)关联关系依赖(use)聚合(have)组合(contain)和聚合关联的区别类和接口的关系实现(enable)接口提供一组功能的描述,而实现就是编写接口的代码部分DriverenableDrivable,Driver实现了DrivableclassDriverimple......
  • 学习笔记5
    目录知识点归纳第11章EX2文件系统数据结构苏格拉底挑战问题与解决方案实践过程知识点归纳第11章EX2文件系统数据结构Linux一直将EXT2作为默认文件系统。EXT3是EXT2的扩展。EXT3中增加的主要内容是一个日志文件,他将文件系统的变更记录在日志中。日志可在文件系统崩溃时更快地......
  • 总结整合案例前端页面展示+axios异步请求数据
    页面显示: vue+axios+element<!DOCTYPEhtml><htmllang="en"><head><metacharset="UTF-8"><metaname="viewport"content="width=device-width,initial-scale=1.0"><title&g......
  • 2023_10_15_DAY_01_JAVA_SE_Java基础知识_下_流程控制语句
    2023_10_15_DAY_01_JAVA_SE_Java基础知识_下_流程控制语句分支【选择】结构if语句if(表达式){ 执行语句块;}//if语句的代码执行过程为:如果条件表达式返回真值,则执行功能代码块中的语句;//如果条件表达式返回值为假,则不执行功能代码块。语法说明:if是该语句中的关键字,后......
  • 10,15赛后总结
    你说的对,但是\(mouseboy\)在考场上沉迷原神打表,导致很多题没有想出正解修改01序列考场上,观察到提示第一给点\(d=1\)输出\(0\)骗得10分考后仔细一想,既然要两个相邻\(1\)的距离为&d&倍数,易得我们用a表示第一个点,b表示第二个点得:(a-b)%d==0这不就是同余公......
  • 段页式存储管理
        ......
  • Linux系统第四章文件权限读书笔记
    基本权限UGO:     1.UGO权限的含义:UGO是Linux文件权限管理中的基本概念,表示用户(User)、组(Group)、其他人(Others)。这三个范围定义了文件或目录的访问权限,控制着谁可以执行何种操作。User(用户):这是文件或目录的所有者。用户权限是最重要的,因为他们拥有最高级别的控制权......
  • 手撕Vue-编译指令数据
    经过上一篇的分析,完成了查找指令和模板的功能,接下来就是编译指令的数据了。所以本章节主要处理的方法则是buildElement方法,我们先分析一下我们所拿到的数据在进行编码,这样会更加清晰一些。我将name,value打印出来,分别对应的值是name:v-model,value:name,在今后我们的命......
  • 2023年了都,不会还有入坑Java 的吧?^?
    初识Java一、java语言历史概述Java语言是Sun公司于1990年开发的,当时Green项目小组的研究人员正在致力于为未来的智能设备开发一种新的编程语言。对于新语言的设计,Sun公司研发人员并没有开发一种全新的语言,而是根据嵌入式软件的要求,对C++进行了改造,去除了留在C++的一些不太......
  • 2023/10/15 模拟赛总结
    没考,\(0+0+0+0=0\)。T1-tvST表+单调栈。代码还在调。T2-card不会,好像要权值线段树。T3-moez,运用同余即可。//J2023|BLuemoon_#include<bits/stdc++.h>usingnamespacestd;constintkMaxN=1e5+5;intn,d,s[kMaxN],ans,c;intmain(){cin>>......