原型模式(prototype)优缺点和一些疑惑请大家指教

09-11-02 cuiyuliang926
    

原型模式(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类作为参数,就可以的道这个类的克隆对象

请大家指教

    

3
banq
2009-11-02 17:52

>Threalocal 只有将一个普通的POJO类(不需要实现任何借口),放到里面,不同的线程就可以去到这个对象的克隆对象

你实际和Threalocal耦合了。

你可以自己在clone方法中自己new一下自己,然后装载一些数据即可

cuiyuliang926
2009-11-02 19:30

谢谢banq指教,在jdon我学的了很多