原型模式(prototype)優缺點和一些疑惑請大家指教

cuiyuliang926發表於2009-11-02
原型模式(prototype)的實現主要是利用sun公司提供克隆機制來實現的,在Object這個類中有一個clone方法,這個方法
是有protected 來修飾的,所有普通的java類要想具有克隆能力必須去重寫這個clone方法,我們可以把這個方法封住到一個
抽象類裡,這樣只有再我們的系統在那個類需要具有克隆能力就去繼承者個抽象類。
程式碼如下(我是看了banq對prototype的介紹些的帖子所以程式碼是一樣的也可說是抄襲的 呵呵呵 我只想說明我的觀點)

封裝了clone方法的抽象類

public abstract class CloneableObject implements Cloneable{
public Object clone(){
Object obj = null;
try{
obj = super.clone() ;

}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return obj;
}

}

系統中所有的需要具備clone方法的類只要繼承他就可以了 例如

public class Student extends CloneableObject{
private String name;
private String address;
private String sex;

public Student() {}

public Student(String name, String address,String sex){
this.name = name;
this.address = address;
this.sex = sex;
}

public String toString(){
return "name:"+name+"address:"+address+"sex"+sex;
}



}

測試程式碼
public class Test {

public static void main(String[] args) {
Student stu = new Student("Tom","USA","女");
System.out.println(stu);
Student stu1 =(Student) stu.clone() ;
System.out.println(stu1);
}

}

執行結果
name:Tomaddress:USAsex女
name:Tomaddress:USAsex女

這就是我們常用的原型模式。但是我細想一下這樣的模式還是有一些缺點的
例如:要是類具備克隆能力必須去繼承一個抽象類,就像struts中的action 多多少少有一些耦合,熟悉ThreadLocal
本地執行緒這個類的朋友應該這道,只有將一個普通的POJO類(不需要實現任何藉口),放到裡面,不同的執行緒就可以
去到這個物件的克隆物件,請個位朋友告訴我其中的原理?

我想實現的效果就是,封裝一個克隆工廠(CloneFactory)只有將普通的POJO類作為引數,就可以的道這個類的克隆物件
請大家指教

相關文章