摘要: 原創出處: http://www.cnblogs.com/Alandre/ 泥沙磚瓦漿木匠 但願轉載,保留摘要,謝謝!html
Prototype模式是一種對象建立型模式,它採起復制原型對象的方法來建立對象的實例。使用 Prototype模式建立的實例,具備與原型同樣的 數據。java
1. 由原型對象自身建立目標對象。也就是說,對 象建立這一動做發自原型對象自己。設計模式
2.目標對象是原型對象的一個克隆。也就是說, 經過Prototype模式建立的對象,不單單與原型 對象具備相同的結構,還與原型對象具備相同的 值。ide
3.根據對象克隆深度層次的不一樣,有淺度克隆與 深度克隆。測試
- 在建立對象的時候,咱們不僅是但願被建立的對象繼承 其基類的基本結構,還但願繼承原型對象的數據。this
- 但願對目標對象的修改不影響既有的原型對象(深度克 隆的時候能夠徹底互不影響)。spa
- 隱藏克隆操做的細節。不少時候,對對象自己的克隆需 要涉及到類自己的數據細節。設計
淺度克隆code
import java.util.ArrayList;import java.util.List;public class Person implements Cloneable { private String nanme; private String sex; private int age; private List<String> friends; public String getNanme() { return nanme; } public void setNanme(String nanme) { this.nanme = nanme; } public String getSex() { return sex; } public void setSex(String sex) { this.sex = sex; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public List<String> getFriends() { return friends; } public void setFriends(List<String> friends) { this.friends = friends; } @Override protected Person clone() throws CloneNotSupportedException { return (Person)super.clone(); } }
MainClass:htm
import java.util.ArrayList;import java.util.List;public class MainClass { public static void main(String[] args) throws CloneNotSupportedException { Person person = new Person(); person.setNanme("Jeff Lee"); person.setAge(20); person.setSex("boy"); //Person person2 = person; 引用相同 修改同時修改 Person person2 = person.clone();//引用不一樣 內容相同 修改各自 System.out.println(person2.getNanme()); person2.setNanme("Jeff Lee 2"); System.out.println(person2.getNanme()); System.out.println(person.getNanme()); } }
淺度克隆沒法克隆對象裏面的引用。
深度克隆只須要將其引用重定義下便可:
@Override protected Person clone() throws CloneNotSupportedException { Person person = (Person)super.clone(); List<String> friends = new ArrayList<String>(); for (String friend : this.getFriends()) { friends.add(friend); } person.setFriends(friends); return person; }
測試代碼:
import java.util.ArrayList;import java.util.List;public class MainClass { public static void main(String[] args) throws CloneNotSupportedException { Person person = new Person(); List<String> friends = new ArrayList<String>(); friends.add("Zhang San"); friends.add("Li Si"); person.setFriends(friends); Person person2 = person.clone(); System.out.println(person.getFriends()); System.out.println(person2.getFriends()); friends.add("Wang Wu"); person.setFriends(friends); System.out.println(person.getFriends()); System.out.println(person2.getFriends()); } }
來自:java設計模式
如以上文章或連接對你有幫助的話,別忘了在文章按鈕或到頁面右下角點擊 「贊一個」 按鈕哦。你也能夠點擊頁面右邊「分享」懸浮按鈕哦,讓更多的人閱讀這篇文章。