浅谈Java设计模式之原型模式知识总结

网友投稿 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小时内删除侵权内容。

上一篇:德快递物流查询单号(德天物流快递单号查询)
下一篇:Spring Boot如何读取自定义外部属性详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~