Android设计模式---原型设计模式

一. 核心思想

通过copy(复制)已有的对象来创建的新的对象,从而节省时间和内存。

例如:

  • A a = new A() 已有的对象.
  • copy对象: A aa = a.clone().
二.写法套路
1. implements Cloneable
2. 重写clone();
3. 在clone()写具体内容
三.简单实现

先看具体代码

public class User implements Cloneable{

    public String name = "张三";
    public Address address = new Address("广州");

    @Override
    protected User clone() throws CloneNotSupportedException {
        User user = (User)super.clone();
//        user.address = this.address.clone(); //深拷贝
        return user;
    }

    //toString方法省略
}


public class Address implements Cloneable{
    public String city;
    public Address(String city) {
        this.city = city;
    }
    @Override
    protected Address clone() throws CloneNotSupportedException {
        return (Address) super.clone();
    }
}

两个对象, 其中User中有一个变量是Address. 下面看看现象:

现象1:copy后的值和原来的值对比
说明: copy对象成功

Android设计模式---原型设计模式_第1张图片
现象1.png

现象2:copy后修改name的值
说明: 修改copy后对象的变量(基础变量), 不会对原来的对象产生影响.

Android设计模式---原型设计模式_第2张图片
现象2.png

现象3:copy后修改Address中city的值
说明: 修改copy后对象变量(变量是对象)里面的值, 原来的对象也会跟着变化. 这种叫浅拷贝. 如果想互不影响, 那就要用深拷贝了.
把上面User的clone()方法中的注释的代码放开, 就可以了.

//        user.address = this.address.clone(); //深拷贝
Android设计模式---原型设计模式_第3张图片
现象3.png

总结: 核心就是copy对象, 只需注意深拷贝浅拷贝即可.

你可能感兴趣的:(Android设计模式---原型设计模式)