下面是网上的原型模式例子public abstract class Father implements Cloneable{
private String className; public String getClassName() {
return className;
} public void setClassName(String className) {
this.className = className;
}
public Object clone(){
Object obj = null;
try {
obj = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
}public class Sun1 extends Father{
public Sun1(){
setClassName("Sun1");
}
public void sun1(){}
}public class Sun2 extends Father{
public Sun2(){
setClassName("Sun2");
}
public void sun2(){}
}public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Father f1 = new Sun1();
Father f2 = new Sun2();
System.out.println(f1.getClassName());
System.out.println(f2.getClassName());
}}在Test中测试,没看出来原型有什么用,感觉sun1 sun2只是调用了父类的set方法,什么都没做
private String className; public String getClassName() {
return className;
} public void setClassName(String className) {
this.className = className;
}
public Object clone(){
Object obj = null;
try {
obj = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
}public class Sun1 extends Father{
public Sun1(){
setClassName("Sun1");
}
public void sun1(){}
}public class Sun2 extends Father{
public Sun2(){
setClassName("Sun2");
}
public void sun2(){}
}public class Test { /**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Father f1 = new Sun1();
Father f2 = new Sun2();
System.out.println(f1.getClassName());
System.out.println(f2.getClassName());
}}在Test中测试,没看出来原型有什么用,感觉sun1 sun2只是调用了父类的set方法,什么都没做
super.clone() 浅度复制自己重写clone方法 深度复制
public abstract class Father implements Cloneable{
private String className; public String getClassName() {
return className;
} public void setClassName(String className) {
this.className = className;
}
public Object clone(){
Object obj = null;
try {
obj = super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return obj;
}
}public class Sun1 extends Father{
public Sun1(){
}
public static void main(String [] ags){
Father sun=new Sun1();
Farher sunClone=sun.clone();
}
}原型模式定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象这里 Sun1 就是实际原型,Father 就是 抽象原型 。。 sunClone 通过 sun 的 clone 方法 来 生成
原型的优点
Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
另外 原型模式需要注意的是 深克隆与浅克隆 你可以去 看看我的博客 我 给出了 例子
另外 克隆需要注意 )。克隆满足的条件:对于任何对象x,都有x.clone()!=x,换言之,克隆的对象不是原来的对象;x.clone().getClass()==x.getClass(),换言之,克隆的对象与原对象是同一类型。x.clone().equals(x)成立。
我这里有一个例子你可以看一下:
http://blog.csdn.net/daijope/article/details/6605115