一:享元模式
1.是什么
享原模式可以理解是用来创建对象的一种策略,目的是为了节省空间,提高性能。典型的例子就是String类,基本实现逻辑就是把对象放进一个地方,需要创建对象时先来该地方查找,如果有相同的对象就直接引用,没有才去创建
2.有什么用
在开发中,可能会创建大量相同的对象,这些对象实际是重复的。因此可以在第一次创建对象时先存储起来,当需要的时候直接拿,可以节省大量的内存空间,从而提高性能
二:原型模式
1.是什么
原型模式也可以理解为用来创建对象的一种策略,目的是为了获取与某对象运行时状态相同的对象(其实就是克隆复制一个对象)
2.有什么用
当场景是一个对象,需要有多个修改者时,可以考虑使用原型模式;当需要一个对象的状态,包括属性值等时,也可以考虑使用原型模式;new 一个新对象,然后将当前对象的属性值复制给新对象,效率是不如原型模式的。简单来说,当想要获得一个对象的复制品时,就可以使用原型模式
3.怎么用
原型模式一般结合工厂模式使用,通过工厂来克隆对应的对象
克隆的克隆复制有两种类型,分别是浅克隆与深克隆
浅克隆:只克隆对象,不克隆对象引用类型的属性。也就是虽然创建了一个新对象,但是这两个对象的引用类型的成员变量,或者其他依赖,指向的却是同一个地址,也就是这些引用都是同一个对象。也就是说,不克隆对象的持有引用
深克隆:克隆对象及其所有属性,也就是对象的所有东西,包括引用类型的成员变量都会被克隆。也就是克隆对象及其所有持有引用
4.实现
所有的类都是Object的子类,Object定义了一个clone()方法,但是该方法是一个protected方法,也就是子类无法继承,但是子类可以重写。但是想要实现对象的clone功能,还需要该类实现Cloneable接口,标记该类的实例可以被克隆,否则会抛出异常CloneNotSupportedException(Cloneable接口没有任何实现方法)
另外:Objeck.clone()是浅克隆,如果想要实现深克隆,需要自己重写clone方法时,实现深克隆的逻辑(也就是手动克隆对象的每一个引用变量,也就要求该对象的引用类型也需要实现Cloneable接口)
简而言之:想要实现对象的浅克隆功能需要实现Coneable接口,并重写Object的clone()方法,实现深克隆,则在重写clone()方法时实现深克隆逻辑即可(默认是super.clone()调用父类的clone方法)
最后:附上后端技术交流圈,欢迎各位大佬入圈交流技术......V:ff1341658(先添加好友后拉群,请备注:小白不黑)