原型模式

  今天我们要学习的第一种设计模式是原型模式。

  比如,我们需要三份同样的简历,简历里面包含姓名,性别,工作经历,我们可能会实例化三个简历对象。但是如果我们需要100份简历呢?我们是不是还得实例化100个简历对象呢?这样做好像有点麻烦。

  那么就引入原型模式的概念了,原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

  而在java中,一个对象如果想要被克隆,需要实现Clonable接口,并复写clone()方法。

  要被克隆的对象类:

  

 1 package prototype;
 2 
 3 public class ConcretePrototype implements Cloneable{
 4     
 5     private int a;
 6     
 7     public ConcretePrototype(int a) {
 8         this.a = a;
 9     }
10     
11     public String toString(){
12         return Integer.toString(a);
13     }
14 
15     public ConcretePrototype clone(){
16         ConcretePrototype o = null;
17         try {
18             o = (ConcretePrototype)super.clone();
19         } catch (CloneNotSupportedException e) {
20             e.printStackTrace();
21         }
22         return o;
23     }
24 
25     public int getA() {
26         return a;
27     }
28 
29     public void setA(int a) {
30         this.a = a;
31     }
32 }

客户端调用:

 1 public class MainClass {
 2     public static void main(String[] args) {
 3         ConcretePrototype cp = new ConcretePrototype(1);
 4         
 5         ConcretePrototype cp1 = cp.clone();
 6         cp1.setA(2);
 7         System.out.println(cp1);
 8         
 9         ConcretePrototype cp2 = cp.clone();
10         cp2.setA(3);
11         System.out.println(cp2);
12         
13         System.out.println(cp);
14     }
15 }

这样做似乎没有什么问题,但是我们要注意到这样做其实只做到了浅表赋值,关于浅表赋值和深复制可查看另一篇博客http://www.cnblogs.com/justprograme/archive/2012/10/25/2738451.html

如果被克隆的对象中含有不是基本类型的对象,那么我们需要对他们实现克隆。

posted @ 2012-10-25 11:27  寒剑飘香  阅读(167)  评论(0编辑  收藏  举报