Prototype - 原型创建模式

下面来说说Prototype模式。首先还是照旧先来看看牛人想出Prototype模式的意图。

用原型实例制定创建对象的种类,并且通过拷贝这些原型创建新的对象。(G4)

场景

我们手头上已经得到一个Product实例了,现在我们由于业务的要求,需要再获取若干个完全一样或相近的Product,好完成其他的工作。这个时候我们要做的工作就是复制一个。按照以往的做法,我们是每要求复制出一个的时候,我们会先new出一个对象,然后逐个属性地先从样板Product中get出来再set到新对象中去。

java 代码
 
  1. public class ClassSample {   
  2.   
  3.   private String attrA = null;   
  4.   
  5.   private String attrB = null;   
  6.   
  7.   ......   
  8.   
  9.   // setter and getter   
  10. }  
java 代码
 
  1. // cs1为得到的样本
  2. ClassSample cs2 = new ClassSample();   
  3. cs2.setAttrA( cs1.getAttrA() );   
  4. cs2.setAttrB( cs1.getAttrB() );   
  5. ......  

 程序员总是为如何能够更懒惰而勤奋地努力着。这样的劳模可不是好的程序员该做的事,这种烦琐而重复性高的复制能不能只写一遍呢?答案是“可以”,而且很简单。我们只需要在原型对象中增加一个clone()函数即可,由类本身来帮我们完成这个复制工作。

java 代码
 
  1. public class ClassSample {  
  2.   private String attrA = null;  
  3.   
  4.   private String attrB = null;  
  5.   ......  
  6.   
  7.   // settter and getter  
  8.   
  9.   // clone  
  10.   public ClassSample clone() {  
  11.     ClassSample cs = new ClassSample();  
  12.     cs.setAttrA(this.attrA);  
  13.     cs.setAttrB(this.attrB);  
  14.     return cs;  
  15.   }  
  16. }  

 这样,复制创建对象就简单了很多了。

java 代码
  1. ClassSample cs2 = cs1.clone();  

 本来故事到这里便结束了。可是由于Java为我们做了更多,让我们更方便地使用Prototype模式,为了让懒惰进行到底,也同时体谅一下Java的良苦用心,有义务要在这里说说Java为我们做的Prototype模式的简化。大家都知道在Java中所有的类都是java.lang.Object的子类,而且在Object中已经定义了clone()方法。通过使用这个clone()方法我们就可以简单方便地进行复制创建了。

可是这个clone()方法可不能随便使用,冒失失地调用surper.clone()是会抛出CloneNotSupportedException异常的。我们还需要实现Cloneable接口才行。

java 代码
 
  1. public class ClassSample implements Cloneable {    
  2.   private String attrA = null;    
  3.     
  4.   private String attrB = null;    
  5.   ......    
  6.     
  7.   // settter and getter    
  8.     
  9.   // clone    
  10.   public ClassSample clone() throws CloneNotSupportedException {    
  11.     ClassSample cs = (ClassSample) super.clone();  
  12.     return cs;    
  13.   }    
  14. }  

简单的一句super.clone()就可以完成我们的各种setter,getter操作。确实很方便。 

我们在进行clone的时候仍然使用下面的句子就可以进行对象复制创建了。

java 代码
  1. ClassSample cs2 = cs1.clone();  

 (完)

你可能感兴趣的:(java,工作,prototype)