论坛首页 Java企业应用论坛

Prototype - 原型创建模式

浏览 6860 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (2) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-04-18  

下面来说说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();  

 (完)

   发表时间:2007-05-11  
什么情况下才用的着这种模式呢...
0 请登录后投票
   发表时间:2007-05-22  
没完没完,只说了浅clone ,还有深clone
现在不谈模式了,用到啥子就是啥子
0 请登录后投票
   发表时间:2007-05-23  
javastudy 写道
复制多个对象啊

我的意思是什么情况下才用的着需要复制多个同样的对象出来??
0 请登录后投票
   发表时间:2007-05-23  
不想下流在运用对象时对对象进行操作

当一个传值引用来用时。。。。


不过楼主发入门版 的好一点。。。
因为楼主想要讨论的东西
明显没有什么意义。
0 请登录后投票
   发表时间:2007-06-04  
如果,可以举个简单的运用例子就,更好了
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics