中年从原型模式到浅拷贝和深拷贝
问题
“ 如果你有一个对象 ,并希望生成与其完全相同的一个复制品 ,你该如何实现呢? 首先 ,你必须新建一个属于相同类的对象 。 然后 ,你必须遍历原始对象的所有成员变量 ,并将成员变量值复制到新对象中 。
本文插图
for (int i = 0 i < 10 i++) { Sheep sheep = new Sheep("肖恩"+i+"号",2+i,"白色") System.out.println(sheep.toString())} 这种方式是比较容易想到的 , 但是有几个不足
在创建新对象的时候 , 总是需要重新获取原始对象的属性 , 如果创建的对象比较复杂 , 效率会很低
总是需要重新初始化对象 , 而不是动态地获得对象运行时的状态, 不够灵活
另一方面 , 并非所有对象都能通过这种方式进行复制 ,因为有些对象可能拥有私有成员变量 ,它们在对象本身以外是不可见的
“ 万物兼对象的 Java 中的所有类的根类 Object , 提供了一个 clone() 方法 , 该方法可以将一个 Java 对象复制一份 , 但是需要实现 clone() 的类必须要实现一个接口 Cloneable , 该接口表示该类能够复制且具有复制的能力 。这就引出了原型模式 。基本介绍 原型模式(Prototype模式)是指:用原型实例指定创建对象的种类 , 并且通过拷贝这些原型 , 创建新的对象
原型模式是一种 创建型设计模式 ,使你能够复制已有对象 ,而又无需使代码依赖它们所属的类
工作原理是:通过将一个原型对象传给那个要发动创建的对象 , 这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建 , 即 对象**.clone**()
本文插图
Prototype : 原型 (Prototype) 接口将对克隆方法进行声明
Java 中 Prototype 类需要具备以下两个条件
实现 Cloneable 接口 。 在 Java 语言有一个 Cloneable 接口 , 它的作用只有一个 , 就是在运行时通知虚拟机可以安全地在实现了此接口的类上使用 clone 方法 。 在 Java 虚拟机中 , 只有实现了这个接口的类才可以被拷贝 , 否则在运行时会抛出 CloneNotSupportedException 异常
重写 Object 类中的 clone 方法 。 Java 中 , 所有类的父类都是 Object 类 , Object 类中有一个 clone 方法 , 作用是返回对象的一个拷贝
ConcretePrototype:具体原型 (Concrete Prototype) 类将实现克隆方法 。 除了将原始对象的数据复制到克隆体中之外 ,该方法有时还需处理克隆过程中的极端情况 ,例如克隆关联对象和梳理递归依赖等等 。
Client: 使用原型的客户端 , 首先要获取到原型实例对象 , 然后通过原型实例克隆自己 , 从而创建一个新的对象 。
实例
“ 我们用王二小放羊的例子写这个实例 1、原型类(实现 Clonable) @Setter@Getter@NoArgsConstructor@AllArgsConstructorclass Sheep implements Cloneable { private String name private Integer age private String color
@Override protected Sheep clone() { Sheep sheep = null try { sheep = (Sheep) super.clone() } catch (Exception e) { System.out.println(e.getMessage()) } return sheep }} 2、具体原型
按业务的不同实现不同的原型对象 , 假设现在主角是王二小 , 羊群里有山羊、绵羊一大群
本文插图
public class Goat extends Sheep{ public void graze() { System.out.println("山羊去吃草") }} public class Lamb extends Sheep{ public void graze() { System.out.println("羔羊去吃草") }} 3、客户端 public class Client {
推荐阅读
- 「浏览器」Vivaldi浏览器新推出“中断模式”
- 小机灵鬼|干货速来!透彻剖析微服务架构设计模式,深入开发Java有奇效
- 教育圈|有人开启保命模式,有种折磨叫“陪娃写作业”:有人气到中风
- 大众报业·海报新闻|山东新材料产业激活新动能——专访山东省新材料产业协会会长周传健,专访丨借鉴“华为模式”
- 人民网-财经频道|【行走自贸区】山东自贸区青岛片区:探索中日韩国际合作的新路径、新模式、新机制
- 今日趣闻|杨九红的原型活到九十多岁,但这样的高寿,对她来说实在残忍!
- 英雄联盟|余霜分手后开启奔放模式,一天连晒N组自拍,网友直呼太美了!
- 女性健康|女人过了中年,为啥经常会感到小腿没力气?
- 中年|老小区加装电梯,六七楼业主太难了,一楼的灵魂拷问让他们沉默了
- 中年|谷歌生草机,翻译《我的世界》20变,连亲妈都不认识
