
快速构建对象方法:
使用简单工厂将get,set封装到某个方法中(Client类)
 JDK提供实现Cloneable接口实现快速复制
1 类图

2 适用场景
1、类初始化消耗资源较多。
 2、new 产生的一个对象需要非常繁琐的过程(数据准备、访问权限等)
 3、构造函数比较复杂。
 4、循环体中生产大量对象时。
3 原型模式案例
BeanUtils.copy();
 JSON.parseObject()
4 深浅克隆
4.1 浅克隆
创建一个新对象,新对象的属性和原来对象完全相同,对于非基本类型属性,仍指向原有属性所指向的对象的内存地址。
4.1.2 浅克隆代码案例
必须让目标类实现Cloneable接口,重写java.lang.Object的clone()
@Override
public Object clone() throws CloneNotSupportedException {
    return super.clone();
}
4.2 深克隆
创建一个新对象,属性中引用的其他对象也会被克隆,不再指向原有对象地址。
4.2.2 深克隆代码案例
@Override
public Object clone() throws CloneNotSupportedException {
    try {
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        ObjectOutputStream oos = new ObjectOutputStream(out);
        oos.writeObject(this);
        oos.close();
        //从内存中取出
        byte[] bb = out.toByteArray();
        ByteArrayInputStream in = new ByteArrayInputStream(bb);
        ObjectInputStream ois = new ObjectInputStream(in);
        Object clone = ois.readObject();
        ois.close();
        return clone;
    } catch (Exception e) {
        throw new RuntimeException(e);
    }
}
4.3 克隆会破坏单例模式
4.3.1 解决方式
要么单例类不实现Cloneable 接口;要么重写 clone()方法,在 clone 方法中返回单例对象即可。
@Override
protected Object clone() throws CloneNotSupportedException {
    return this.deepClone();
}
绿色软件搜索【谷丘Coder】后台发送【原型模式】获取笔记资料与思维导图



















