原型模式
浅克隆 c++
#include <iostream>
using namespace std;
//向量类
class Vector{
private:
int *p;
int len;
public:
Vector(int len);
Vector(const Vector &vector); //拷贝构造函数
~Vector();
int operator[](int i) const { return p[i]; }
int &operator[](int i){ return p[i]; }
int length() const { return len; }
};
Vector::Vector(int len): len(len){
p = (int*)calloc( len, sizeof(int) );
}
//拷贝构造函数
Vector::Vector(const Vector &vector){
this->len = vector.len;
this->p = vector.p;
}
Vector::~Vector(){ free(p); }
//打印
void display(const Vector &vector){
int len = vector.length();
for(int i=0; i<len; i++){
if(i == len-1){
cout<<vector[i]<<endl;
}else{
cout<<vector[i]<<", ";
}
}
}
int main(){
Vector v1(10);
for(int i=0; i<10; i++){
v1[i] = i;
}
Vector v2 = v1;
v2[6] = 55;
v2[2] = 20;
cout<<"浅克隆:"<<endl;
cout<<"更改copyVector后vector的数据:"<<endl;
display(v1);
cout<<"更改copyVector后copyVector的数据:"<<endl;
display(v2);
return 0;
}
深克隆 c++
#include <iostream>
using namespace std;
//向量类
class Vector{
private:
int *p;
int len;
public:
Vector(int len);
Vector(const Vector &vector); //拷贝构造函数
~Vector();
int operator[](int i) const { return p[i]; }
int &operator[](int i){ return p[i]; }
int length() const { return len; }
};
Vector::Vector(int len): len(len){
p = (int*)calloc( len, sizeof(int) );
}
//拷贝构造函数
Vector::Vector(const Vector &vector){
this->len = vector.len;
this->p = (int*)calloc( this->len, sizeof(int) );
memcpy( this->p, vector.p, len * sizeof(int) );
}
Vector::~Vector(){ free(p); }
//打印
void display(const Vector &vector){
int len = vector.length();
for(int i=0; i<len; i++){
if(i == len-1){
cout<<vector[i]<<endl;
}else{
cout<<vector[i]<<", ";
}
}
}
int main(){
Vector v1(10);
for(int i=0; i<10; i++){
v1[i] = i;
}
Vector v2 = v1;
v2[6] = 55;
v2[2] = 20;
cout<<"深克隆:"<<endl;
cout<<"更改copyVector后vector的数据:"<<endl;
display(v1);
cout<<"更改copyVector后copyVector的数据:"<<endl;
display(v2);
return 0;
}
浅克隆java:
//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;
}
}
//Attachment.java
package qiankelong;
public class Attachment
{
public void download()
{
System.out.println("复制向量");
}
}
//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());
}
}
深克隆Java:
//Vector.java
package shenkelong;
import java.io.*;
import java.util.Arrays;
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;
}
}
//Attachment.java
package shenkelong;
import java.io.*;
public class Attachment implements Serializable
{
public void download()
{
System.out.println("复制向量");
}
}
//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());
}
}
#include <iostream>
using namespace std;
//向量类
class Vector{
private:
int *p;
int len;
public:
Vector(int len);
Vector(const Vector &vector); //拷贝构造函数
~Vector();
int operator[](int i) const { return p[i]; }
int &operator[](int i){ return p[i]; }
int length() const { return len; }
};
Vector::Vector(int len): len(len){
p = (int*)calloc( len, sizeof(int) );
}
//拷贝构造函数
Vector::Vector(const Vector &vector){
this->len = vector.len;
this->p = vector.p;
}
Vector::~Vector(){ free(p); }
//打印
void display(const Vector &vector){
int len = vector.length();
for(int i=0; i<len; i++){
if(i == len-1){
cout<<vector[i]<<endl;
}else{
cout<<vector[i]<<", ";
}
}
}
int main(){
Vector v1(10);
for(int i=0; i<10; i++){
v1[i] = i;
}
Vector v2 = v1;
v2[6] = 55;
v2[2] = 20;
cout<<"浅克隆:"<<endl;
cout<<"更改copyVector后vector的数据:"<<endl;
display(v1);
cout<<"更改copyVector后copyVector的数据:"<<endl;
display(v2);
return 0;
}
深克隆 c++
#include <iostream>
using namespace std;
//向量类
class Vector{
private:
int *p;
int len;
public:
Vector(int len);
Vector(const Vector &vector); //拷贝构造函数
~Vector();
int operator[](int i) const { return p[i]; }
int &operator[](int i){ return p[i]; }
int length() const { return len; }
};
Vector::Vector(int len): len(len){
p = (int*)calloc( len, sizeof(int) );
}
//拷贝构造函数
Vector::Vector(const Vector &vector){
this->len = vector.len;
this->p = (int*)calloc( this->len, sizeof(int) );
memcpy( this->p, vector.p, len * sizeof(int) );
}
Vector::~Vector(){ free(p); }
//打印
void display(const Vector &vector){
int len = vector.length();
for(int i=0; i<len; i++){
if(i == len-1){
cout<<vector[i]<<endl;
}else{
cout<<vector[i]<<", ";
}
}
}
int main(){
Vector v1(10);
for(int i=0; i<10; i++){
v1[i] = i;
}
Vector v2 = v1;
v2[6] = 55;
v2[2] = 20;
cout<<"深克隆:"<<endl;
cout<<"更改copyVector后vector的数据:"<<endl;
display(v1);
cout<<"更改copyVector后copyVector的数据:"<<endl;
display(v2);
return 0;
}
浅克隆java:
//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;
}
}
//Attachment.java
package qiankelong;
public class Attachment
{
public void download()
{
System.out.println("复制向量");
}
}
//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());
}
}
深克隆Java:
//Vector.java
package shenkelong;
import java.io.*;
import java.util.Arrays;
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;
}
}
//Attachment.java
package shenkelong;
import java.io.*;
public class Attachment implements Serializable
{
public void download()
{
System.out.println("复制向量");
}
}
//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());
}
}

浙公网安备 33010602011771号