设计模式 -- 原型模式(Prototype Pattern)

本文介绍了Java设计模式中的原型模式,用于避免复杂对象构建过程导致的性能损耗。通过`clone()`方法实现浅拷贝,仅拷贝对象的基本数据类型和引用地址,而深拷贝利用序列化实现对象的完全独立复制。同时,文中提到了浅拷贝和深拷贝在HashMap等集合类中的区别,并以Intent的`clone()`方法为例说明深拷贝的应用。此外,还列举了一系列关于设计模式的学习资源。
摘要由CSDN通过智能技术生成

当某个对象的数据结构或者构建过程特别复杂(比如复杂计算得出结果),频繁的构建势必会消耗系统性能,这个时候我们采用原型模式对原有的 对象进行克隆,构建新的对象。

即 clone()

  • 优点:直接克隆原有实例生成新的实例,免去了复杂的构建过程,节省了系统资源。

public class Prototype implements Cloneable, Serializable {  
  
    private static final long serialVersionUID = 1L;  
    private String string;  
  
    private SerializableObject obj;  
  
    /* 浅复制 */  
    public Object clone() throws CloneNotSupportedException {  
        Prototype proto = (Prototype) super.clone();  
        return proto;  
    }  
  
    /* 深复制 */  
    public Object deepClone() throws IOException, ClassNotFoundException {  
  
        /* 写入当前对象的二进制流 */  
        ByteArrayOutputStream bos = new ByteArrayOutputStream();  
        ObjectOutputStream oos = new ObjectOutputStream(bos);  
        oos.writeObject(this);  
  
        /* 读出二进制流产生的新对象 */  
        ByteArrayInputStream bis = new ByteArrayInputStream(bos.toByteArray());  
        ObjectInputStream ois = new ObjectInputStream(bis);  
        return ois.readObject();  
    }  
}

浅拷贝 & 深拷贝

比如 Hashmap,浅拷贝只会复制索引,不会复制数据本身。浅拷贝得到的对象跟原始对象共享数据;深拷贝既复制索引,也复制数据本身,得到完全独立的对象。

clone() 方法执行的是浅拷贝,只会拷贝对象中的基本数据类型数据(int、long 等),以及引用对象的内存地址,不会拷贝引用对象本身。

浅拷贝:

深拷贝:

Intent 的 clone 方法实现: return new Intent(this); 用于深拷贝:this.mCategories = new HashSet<String>(o.mCategories);


根据以下文章总结:

  1. Java设计模式:23种设计模式全面解析(超级详细)HYPERLINK http://c.biancheng.net/design_pattern/ 

  2. 3种设计模式详解 https://www.iteye.com/blog/zz563143188-1847029 

  3. Android系统编程思想:设计模式https://github.com/sucese/android-open-source-project-analysis/blob/master/doc/Android%E7%B3%BB%E7%BB%9F%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E7%AF%87/02Android%E7%B3%BB%E7%BB%9F%E8%BD%AF%E4%BB%B6%E8%AE%BE%E8%AE%A1%E7%AF%87%EF%BC%9A%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F.md#35-%E8%A7%82%E5%AF%9F%E8%80%85%E6%A8%A1%E5%BC%8F

  4. 设计模式 https://blog.csdn.net/shusheng0007/category_8638565.html

  5. java设计模式 https://blog.csdn.net/qq_37909508/category_8976362.html

  6. 设计模式 https://www.cnblogs.com/zuoxiaolong/category/509144.html 

  7. 设计模式 在源码中的应用 https://blog.csdn.net/qq_36970993/category_10620886.html

  8. Android系统设计中存在设计模式分析 https://www.2cto.com/kf/201208/150650.html

  9. Android设计模式系列 - 基于android的各种代码分析各种设计模式 https://www.cnblogs.com/qianxudetianxia/category/312863.html 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值