原型模式 Prototype模式

来源:互联网 发布:双系统linux安装教程 编辑:程序博客网 时间:2024/04/30 16:04
一、什么是原型模式
Prototype模式是一种对象创建型模式,它采取复制原型对象的方法来创建对象的实例。使用Prototype模式创建的实例,具有与原型一样的数据。

二、原型模式的特点
1. 由原型对象自身创建目标对象。也就是说,对象创建这一动作发自原型对象本身。
2. 目标对象是原型对象的一个克隆。也就是说,通过Prototype模式创建的对象,不仅仅与原型对象具有相同的结构,还与原型对象具有相同的值。
3. 根据对象克隆深度层次的不同,有浅度克隆与深度克隆。

三、原型模式应用场景
- 在创建对象的时候,我们不只是希望被创建的对象继承其基类的基本结构,还希望继承原型对象的数据。
- 希望对目标对象的修改不影响既有的原型对象(深度克隆的时候可以完全互不影响)。

- 隐藏克隆操作的细节。很多时候,对对象本身的克隆需要涉及到类本身的数据细节。


Person.java

[java] view plaincopy
  1. import java.util.ArrayList;   
  2. import java.util.List;   
  3.    
  4. public class Person implements Cloneable{   
  5.     // 姓名   
  6.     private String name;   
  7.     // 年龄   
  8.     private int age;   
  9.     // 性别   
  10.     private String sex;   
  11.     //朋友   
  12.     private List<String> friends;   
  13.    
  14.     public List<String> getFriends() {   
  15.         return friends;   
  16.     }   
  17.    
  18.     public void setFriends(List<String> friends) {   
  19.         this.friends = friends;   
  20.     }   
  21.    
  22.     public String getName() {   
  23.         return name;   
  24.     }   
  25.    
  26.     public void setName(String name) {   
  27.         this.name = name;   
  28.     }   
  29.    
  30.     public int getAge() {   
  31.         return age;   
  32.     }   
  33.    
  34.     public void setAge(int age) {   
  35.         this.age = age;   
  36.     }   
  37.    
  38.     public String getSex() {   
  39.         return sex;   
  40.     }   
  41.    
  42.     public void setSex(String sex) {   
  43.         this.sex = sex;   
  44.     }   
  45.    
  46.     @Override   
  47.     public Person clone() {   
  48.         try {   
  49.             Person person  = (Person)super.clone();   
  50.             List<String> newfriends = new ArrayList<String>();   
  51.             for(String friend : this.getFriends()) {   
  52.                 newfriends.add(friend);   
  53.             }   
  54.             person.setFriends(newfriends);   
  55.             return  person;   
  56.         } catch (CloneNotSupportedException e) {   
  57.             e.printStackTrace();   
  58.             return null;   
  59.         }   
  60.     }   
  61.    
  62. }  

MainClass.java

[java] view plaincopy
  1. import java.util.ArrayList;   
  2. import java.util.List;   
  3.    
  4. public class MainClass {   
  5.     public static void main(String[] args) {   
  6. //      Person person1 = new Person();   
  7. //      person1.setName("lifengxing");   
  8. //      person1.setAge(30);   
  9. //      person1.setSex("男");   
  10. //   
  11. ////        Person person2 = person1;   
  12. //      Person person2 = person1.clone();   
  13. //   
  14. //      System.out.println(person1.getName());   
  15. //      System.out.println(person1.getAge());   
  16. //      System.out.println(person1.getSex());   
  17. //   
  18. //      System.out.println(person2.getName());   
  19. //      System.out.println(person2.getAge());   
  20. //      System.out.println(person2.getSex());   
  21.    
  22.         Person person1 = new Person();   
  23.         List<String> friends = new ArrayList<String>();   
  24.         friends.add("James");   
  25.         friends.add("Yao");   
  26.    
  27.         person1.setFriends(friends);   
  28.    
  29.         Person person2 = person1.clone();   
  30.    
  31.         System.out.println(person1.getFriends());   
  32.         System.out.println(person2.getFriends());   
  33.    
  34.         friends.add("Mike");   
  35.         person1.setFriends(friends);   
  36.         System.out.println(person1.getFriends());   
  37.         System.out.println(person2.getFriends());   
  38.     }   
  39. }  
0 0