原型模式
2020-04-13 08:56:48来源:博客园 阅读 ()
原型模式
浅拷贝:实例的基本数据类型(8种),重新clone一个数据一样的实例对象,引用类型clone地址值,不重新生成引用对象副本引用类型不独立
public class Person implements Cloneable { private String name; private int age; private String sex; private List<String> friends; public List<String> getFriends() { return friends; } public void setFriends(List<String> friends) { this.friends = friends; } public String getName() { return name; } public void setName(String name) { this.name = name; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } @Override public String toString() { return "Person{" + "name='" + name + '\'' + ", age=" + age + ", sex='" + sex + '\'' + ", friends=" + friends + '}'; } /* @Override//单纯的引用地址值 protected Person clone(){ try { return (Person) super.clone(); } catch (CloneNotSupportedException e) { e.printStackTrace(); return null; } }*/ @Override protected Person clone() { try { Person person = (Person) super.clone(); List<String> friends = new ArrayList<>(); for (String friend : this.friends) { friends.add(friend); } person.setFriends(friends); return person; } catch (CloneNotSupportedException e) { e.printStackTrace(); } return null; } }View Code
深拷贝:实例的任何类型都clone一份,副本完全独立
public class MainClass { public static void main(String[] args) { Person person = new Person(); person.setAge(1); person.setName("张三"); person.setSex("男"); /* Person person2=new Person(); person2.setAge(1); person2.setName("李四"); person2.setSex("男");*/ /*Person person2 = person.clone(); person2.setName("李四"); System.out.println(person); System.out.println(person2);*/ ArrayList<String> friends = new ArrayList<>(); friends.add("kobe"); friends.add("t-mac"); person.setFriends(friends); Person person1 = person.clone(); friends.add("Iverson"); System.out.println(person); System.out.println(person1); } }View Code
浅拷贝单纯继承了Object的clone()方法,而深拷贝继承的同时也将引用类型的实例对象依次克隆。
小结:原型模式主要将需要创建的实例对象实现Cloneable接口,重写clone()方法,倘若需要主副分离就深拷贝,那样就互不影响,倘若为了节省在资源或者仅仅改变基本数据类型,那么浅拷贝也是不错的。
原文链接:https://www.cnblogs.com/shun998/p/12691866.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
下一篇:单例模式
- 设计模式-委派/策略模式 2020-06-09
- 深入理解:设计模式中的七大设计原则 2020-06-07
- 设计模式---类之间的关系知多少 2020-06-07
- 你与面试官所了解的单例模式并不一样! 2020-06-06
- 高手眼中的观察者模式有什么不一样 2020-06-05
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash