设计模式普及之原型模式

原型模式解析与应用
本文介绍了设计模式中的原型模式,包括其定义、使用场景、实现方式,特别提到了浅拷贝和深拷贝的概念。此外,文章还分享了通过阅读《Android源码设计模式解析与实战》一书后的理解与心得。

原型模式的定义:

用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象。

原型模式的使用场景:

1.类初始化需要消耗非常多的资源,包括数据、硬件资源等;
2.通过new产生一个对象需要非常繁琐的数据准备或访问权限;
3.一个对象需要提供给其他对象访问,而且各个调用者可能度需要修改其值时。

简单实现的方式:

实现Cloneable接口,重写clone方法
public class Word {
    private String mText;
    private ArrayList<String> mImages = new ArrayList<>();

    @Override
    protected Word clone() {
        Word doc = null;
        try {
            doc = (Word) super.clone();
            //浅拷贝
            doc.mImages = this.mImages;
            doc.mText = this.mText;
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return doc;
    }

    //...setter ...getter
}

这里涉及到浅拷贝和深拷贝的知识:

浅拷贝:只是影子拷贝,实际上并不是将数据拷贝一份,而是将引用指向了内存中对象的内存地址。
深拷贝:真实的将数据进行拷贝。

只需要将注释下的代码替换成以下方式:

doc.mImages = (ArrayList<String>) this.mImages.clone()

优点:

原型模式时在内存中二进制流的拷贝,要比直接new一个对象性能好的多,尤其是循环体内。

缺点:

直接在内存中拷贝是不会执行构造函数的,实际开发要注意。

读《Android源码设计模式解析与实战》后记录

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值