设计模式之原型模式

原型模式

定义

如果对象的创建成本比较大,而同一个类的不同对象之间差别不大(大部分字段都相同),在这种情况下,我们可以利用对已有对象(原型)进行复制(或者叫拷贝)的方式来创建新对象,以达到节省创建时间的目的。这种基于原型来创建对象的方式就叫作原型设计模式(Prototype Design Pattern),简称原型模式。

类图

在这里插入图片描述

实现

1. 浅拷贝

@Data
public class SearchWords implements Cloneable{
    String keyWorld;
    long updateTimeStamp;
    long lastUpdateTime;
    ReferenceClass referenceClass;

    public SearchWords(String keyWorld, long lastUpdateTime) {
        this.keyWorld = keyWorld;
        this.lastUpdateTime = lastUpdateTime;
    }

    @Override
    protected SearchWords clone() throws CloneNotSupportedException {
        SearchWords content = null;
        try {
            content = (SearchWords)super.clone();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return content;
    }

    @Override
    public String toString() {
        return "SearchContent{" +
                "keyWorld='" + keyWorld + '\'' +
                ", updateTimeStamp=" + updateTimeStamp +
                '}';
    }
}

2. 深拷贝

public Object deepCopy(Object object) throws Exception{
    ByteArrayOutputStream bo = new ByteArrayOutputStream();
    ObjectOutputStream objectOutputStream = new ObjectOutputStream(bo);
    objectOutputStream.writeObject(object);

    ByteArrayInputStream bi = new ByteArrayInputStream(bo.toByteArray());
    ObjectInputStream oi = new ObjectInputStream(bi);
    return oi.readObject();
}

总结

  1. 浅拷贝深拷贝的区别在于: 浅拷贝只会复制的索引,不会复制数据本身。相反,深拷贝不仅会复制索引,还会复制数据本身。浅拷贝得到的对象和原始对象共享数据,而深拷贝得到的是一份独立的对象
  2. 如果要拷贝的对象是不可变对象,浅拷贝共享不可变对象是没问题的,但对于可变对象来说,浅拷贝得到的对象和原始对象会共享部分数据,就有可能出现数据被修改的风险,也就变得复杂多了
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值