首页 > 其他分享 >Tutorial 6_原型模式

Tutorial 6_原型模式

时间:2022-10-20 17:37:19浏览次数:36  
标签:vector System 模式 Vector 原型 array public Tutorial out

向量的原型

用C++完成数学中向量的封装,其中,用指针和动态申请支持向量长度的改变,使用浅克隆和深克隆复制向量类,比较这两种克隆方式的异同。

浅克隆

 

 

深克隆

 

 

代码:

 

 

Java
浅克隆:
2.1 Attachment.java
package qiankelong;

public class Attachment {

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

2.2 Client.java
package qiankelong;

public class Client {

    public static void main(String a[])
    {
             
             Vector vector,copyVector;
             vector=new Vector();
             int[] arr= {2,8,3,6};
             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==copyVector);
             
             System.out.println("vector.getAttachment==copyVector.getAttachment?"); 
             System.out.println(vector.getAttachment()==copyVector.getAttachment());            
    }
    
}

2.3 Vector.java
package qiankelong;

import java.util.Arrays;
 
public class Vector implements Cloneable 
{
    
     private int[] array; 
     private Attachment attachment=null;
     
     public Vector()
     {
        
         this.attachment=new Attachment();
     }     
     
     public Object clone()
     {
         Vector clone=null;
         try
         {
             clone=(Vector)super.clone();        
         }
         catch(CloneNotSupportedException e)
         {
             System.out.println("Clone failure!");
         }
         return clone;
     }
     
     public Attachment getAttachment()
     {
         return this.attachment;
     }
     
     public void display()
     {
             System.out.println(Arrays.toString(array));    
     }
 
     public int[] getArray() {
         return array;
     }
 
     public void setArray(int[] array) {
         this.array = array;
     }
     
}

 

 

 

深克隆
2.4    Attachment.java
package shenkelong;

import java.io.*;

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

2.5    Vector.java
package shenkelong;

import java.io.*;
import java.util.*;

public class Vector implements Serializable{

    private int[] array;
    private Attachment attachment=null;
     
    public Vector()
    {
        this.attachment=new Attachment();
    }
     
    public Object deepClone() throws IOException, ClassNotFoundException, OptionalDataException
    {
        //将对象写入流中
        ByteArrayOutputStream bao=new ByteArrayOutputStream();
        ObjectOutputStream oos=new ObjectOutputStream(bao);
        oos.writeObject(this);
         
        //将对象从流中取出
        ByteArrayInputStream bis=new ByteArrayInputStream(bao.toByteArray());
        ObjectInputStream ois=new ObjectInputStream(bis);
        return(ois.readObject());
    }
     
    public Attachment getAttachment()
    {
        return this.attachment;
    }
     
    public void display()
    {
            System.out.println(Arrays.toString(array));
    }
 
    public int[] getArray() {
        return array;
    }
 
    public void setArray(int[] array) {
        this.array = array;
    }
    
}

2.6    Client.java
package shenkelong;

public class Client{
    
    public static void main(String a[])
    {
        
        Vector vector,copyVector=null;
         
        vector=new Vector();
        int[] arr= {2,8,3,6};
        vector.setArray(arr);
        System.out.println("深克隆示例:");
         
        try{
            copyVector=(Vector)vector.deepClone(); 
        }
        catch(Exception e)
        {
            e.printStackTrace();
        }  
        System.out.print("vector:");
        vector.display();
        System.out.print("copyVector:");
        copyVector.display();
        System.out.println("vector==copyVector?");
        System.out.println(vector==copyVector);
         
        System.out.println("vector.getAttachment==copyVector.getAttachment?");
        System.out.println(vector.getAttachment()==copyVector.getAttachment());    
        
    }
    
}

 

 

C++
#include<cmath>
#include<iostream>
using namespace std;

class Vector{
private:
    double *array =new double[4];
    double length;
public:
    Vector(double arr[4])
    {
        this->array[0] = arr[0];
        this->array[1] = arr[1];  
        this->array[2] = arr[2];
        this->array[3] = arr[3];
        this->length = sqrt(((arr[0] - arr[1])*(arr[0] - arr[1])) + ((arr[2] - arr[3])*(arr[2] - arr[3])));
    }
    ~Vector()
    {
        delete[]array;
        this->length = 0;
    }
    Vector* clone()
    {
        return new Vector(*this);
    }

    Vector(const Vector& vector)
    {
        //浅克隆
        this->array = vector.array;
        this->length = vector.length;

    }
    void show()
    {
        cout << "向量长度:" << this->length << endl;
    }
};
int main()
{
    double s[4] = { 1, 2, 3, 4 };
    Vector* v1 = new Vector(s);
    Vector* v2 = v1->clone();
    v1->show();
    v2->show();
    return 0;
}

 

标签:vector,System,模式,Vector,原型,array,public,Tutorial,out
From: https://www.cnblogs.com/manmmm/p/16810588.html

相关文章

  • Tutorial 7_单例模式
    学号的单一仿照课堂的身份证的例子,实现每个同学仅有一个学号这一问题。类图  代码  2.1StudentID.javapackagedanli;publicclassStudentID{......
  • Tutorial 8_适配器模式
    双向适配器实现一个双向适配器,使得猫可以学狗叫,狗可以学猫抓老鼠。  代码  ICat.javapackageshipeiqi;publicinterfaceICat{publicvoideat()......
  • Tutorial 9_桥接模式
    两个维度的桥接模式用桥接模式实现在路上开车这个问题,其中,车可以是car或bus,路可以是水泥路或沥青路。类图  代码Vehicle.javapackageqiaojie;publicinterfa......
  • Collections 类中设计模式的应用
    装饰器模式Collections类是一个集合容器的工具类,提供了很多静态方法,用来创建各种集合容器,比如通过unmodifiableColletion()静态方法,来创建UnmodifiableCollection类......
  • Calendar 类中设计模式的应用
    包名:java.util.Calendar工厂模式Calendar类提供了大量跟日期相关的功能代码,同时,又提供了一个getInstance()工厂方法,用来根据不同的TimeZone和Locale创建不同的Ca......
  • 享元模式
    实验13:享元模式本次实验属于模仿型实验,通过本次实验学生将掌握以下内容:1、理解享元模式的动机,掌握该模式的结构;2、能够利用享元模式解决实际问题。   ......
  • 9000字,唠唠架构中的设计模式
    1设计模式概述​ 软件设计模式(SoftwareDesignPattern),俗称设计模式,设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。它描述了在软件设......
  • MybatisPlus对租户模式的支持(一)
    前言最近接到一个任务,要将现有的用户系统改成租户模式。改造成租户模式最简单的方式就是为需要进行数据隔离的表加上租户id字段,然后前端调接口查询数据时,根据当前用户的租......
  • 设计模式之UML类图
    UML图示简介在UML中,类使用包含类名、属性和操作且带有分割线的长方形来表示,如图所示,定义一个Student类,它包含属性name、age和id,以及操作modifyInfo()。其对应的......
  • 【多线程那些事儿】如何使用C++写一个线程安全的单例模式?
    如何写一个线程安全的单例模式?单例模式的简单实现单例模式大概是流传最为广泛的设计模式之一了。一份简单的实现代码大概是下面这个样子的:classsingleton{public: s......