原型模式 (学习笔记4)

原文地址:http://c.biancheng.net/view/1343.html

使用场景:

  1. 通过new 创建新的副本非常麻烦,需要传入很多值,且这些值大部分是不变的。
  2. 需要不停的高效的创建新的副本来满足业务需求

克隆:

  1. 浅克隆:生成一个新的副本,但是非基本类型的数据还是指向原内存地址。
  2. 深克隆:生成一个新的副本,包括非基本类型的数据也是新的。

object.clone()属于浅克隆,只有实现Cloneable接口才是深克隆。

实现深度克隆还有:

  1. 通过构造函数实现
  2. Apache Commons Lang序列化 SerializationUtils.clone(obj)
  3. Gson, Jackson, fastjson等。

优点:

  1. JAVA自带的克隆模式是基于内存二进制流,在性能方面比new要高出许多。
  2. 可以使用深度克隆的方式保留一份历史副本,以便在需要的时候可以做到操作回退。

结构图:
image
示例代码:

//具体原型类
    class Realizetype implements Cloneable {
        Realizetype() {
            System.out.println("具体原型创建成功!");
        }
        public Object clone() throws CloneNotSupportedException {
            System.out.println("具体原型复制成功!");
            return (Realizetype) super.clone();
        }
    }
    //原型模式的测试类
    public class PrototypeTest {
        public static void main(String[] args) throws CloneNotSupportedException {
            Realizetype obj1 = new Realizetype();
            Realizetype obj2 = (Realizetype) obj1.clone();
            System.out.println("obj1==obj2?" + (obj1 == obj2));
        }
    }



posted @ 2021-11-15 10:32  huiy_小溪  阅读(33)  评论(0编辑  收藏  举报