Linux中怎么用cat命令创建文件并写入数据
256
2023-01-12
浅谈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;
}
}
这是Brothhttp://er类
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()方法
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~