浅谈Java设计模式之原型模式知识总结
如何使用?
1.首先定义一个User类,它必须实现了Cloneable接口,重写了clone()方法。
public class User implements Cloneable { private String name; private int age; private Brother brother; @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } }
2.Brother类
public class Brother{ private String name; }
3.应用演示类
public class PrototypeDemo { public static void main(String[] args) throws CloneNotSupportedException { User user1 = new User(); user1.setName("秋红叶"); user1.setAge(20); Brother brother1 = new Brother(); brother1.setName("七夜圣君"); user1.setBrother(brother1); // 我们从克隆对象user2中修改brother,看看是否会影响user1的brother User user2 = (User) user1.clone(); user2.setName("燕赤霞"); Brother brother2 = user2.getBrother(); brother2.setName("唐钰小宝"); System.out.println(user1); System.out.println(user2); System.out.println(user1.getBrother() == user2.getBrother()); } }
4.深拷贝写法
这是User类
public class User implements Cloneable { private String name; private int age; private Brother brother; /** * 主要就是看这个重写的方法,需要将brother也进行clone */ @Override protected Object clone() throws CloneNotSupportedException { User user = (User) super.clone(); user.brother = (Brother) this.brother.clone(); return user; } }
这是Brother类
public class Brother implements Cloneable{ private String name; @Override protected Object clone() throws CloneNotSupportedException { return super.clone(); } }
这里是结果演示
public class PrototypeDemo { public static void main(String[] args) throws CloneNotSupportedException { User user1 = new User(); user1.setName("秋红叶"); user1.setAge(20); Brother brother1 = new Brother(); brother1.setName("七夜圣君"); user1.setBrother(brother1); // 我们从克隆对象user2中修改brother,看看是否会影响user1的brother User user2 = (User) user1.clone(); user2.setName("燕赤霞"); Brother brother2 = user2.getBrother(); brother2.setName("唐钰小宝"); System.out.println(user1); System.out.println(user2); System.out.println(user1.getBrother() == user2.getBrother()); } }
可以看到,user1的brother没有受到user2的影响,深拷贝成功!
5.图解深拷贝与浅拷贝
总结与思考
java中object类的clone()方法为浅拷贝必须实现Cloneable接口如果想要实现深拷贝,则需要重写clone()方法
到此这篇关于浅谈Java设计模式之原型模式知识总结的文章就介绍到这了,更多相关Java原型模式内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
如何用idea编写并运行第一个spark scala处理程序
详细介绍了如何使用IntelliJ IDEA创建Scala项目,包括配置JDK和Scala SDK,添加Maven支持,编辑pom.xml,并创建及运行Scala程序,这为Scala初学者提供了一个基础的项目搭建和运行指南2024-09-09一文搞懂并学会使用SpringBoot的Actuator运行状态监控组件的详细教程
这篇文章主要介绍了一文搞懂并学会使用SpringBoot的Actuator运行状态监控组件,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-09-09Spring Boot ActiveMQ发布/订阅消息模式原理解析
这篇文章主要介绍了Spring Boot ActiveMQ发布/订阅消息模式原理解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下2020-07-07Hibernate 与 Mybatis 的共存问题,打破你的认知!(两个ORM框架)
这篇文章主要介绍了Hibernate 与 Mybatis 如何共存?本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下2020-08-08
最新评论