设计模式之原型模式

原型模式:一句话总结,每次都会创建一个新的对象,这里Spring的scope=“prototype”,就是原型模式

其中原型模式分为两种:
一种是浅拷贝,浅拷贝的意思是说,copy对象的时候,只能copy一个类的基本属性类型以及String类型
一种是深拷贝,深拷贝的意思是说,copy对象的时候,除了一个类的基本属性类型以及String类型的成员变量之外,还包括它的引用类型,同样会进行copy

下面先说浅拷贝,浅拷贝也是最简单最容易理解的写法,实现cloneable接口,重写里面的clone方法,即可实现
话不多说,上代码:

public class sheep implements Cloneable{
private String name;
private Integer age;
private String color;

//省略 getter、setter、construct

//通过重写clone方法来实现浅拷贝
@Override
protected Object clone() throws CloneNotSupportedException{
Sheep sheep = (Sheep)super.clone();
return sheep;
}

}

public class client(){
main(){
Sheep sheep = new Sheep(“小白羊”,1,“白色”);
Sheep sheep2 = (Sheep)sheep.clone();
}
}

深拷贝:

深拷贝有两种实现形式:
一种是通过重写clone方法来实现
一种是通过序列化来实现

通过重写clone方法来实现:
@Override
protected Object clone() throws CloneNotSupportedException{
Sheep sheep = (Sheep)super.clone(); //实现基本属性的克隆
sheep.引用类型成员变量 = (引用类型)引用类型成员变量.clone();
return sheep;
}

通过序列化来实现:

// 可能会有异常,所以直接抛出当然也可以进行try catch 拦截
public Object deepClone() throws Exception{
// 创建流对象
ByteArrayOutputStream bos = null;
ObjectOutputStream oos = null;
ByteArrayInputStream bis = null;
ObjectInputStream ois = null;

//序列化
bos = new ByteArrayOutputStream();
oos = new ObjectOutputStream(bos);
oos.writeObject(this); //当前这个对象以对象流的形式输出

//反序列化
bis = new ByteArrayInputStream(bos.toByteArray());
ois = new ObjectInputStream(bis);
Deep deep = (Deep)ois.readObject();

//关闭流
bos.close();

return deep;

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值