原型模式定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.
Prototype模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝它们自己来实施创建。
如何使用? 因为Java中的提供clone()方法来实现对象的克隆,所以Prototype模式实现一下子变得很简单.
以勺子为例:
package
com.pattern.prototype;
/** */ /**
* 原型类(以汤匙为例) ,注意要实现Cloneable接口
*
* @author zdw
*
*/
public abstract class AbstractSpoon implements Cloneable
{
public String spoonName;
public String getSpoonName()
{
return this.spoonName;
}
public void setSpoonName(String spoonName)
{
this.spoonName = spoonName;
}
/** *//**
* 重写clone()方法
*/
@Override
public Object clone()
{
try
{
return super.clone();
} catch (CloneNotSupportedException e)
{
System.out.println("此对象不支持复制");
}
return null;
}
}
/** */ /**
* 原型类(以汤匙为例) ,注意要实现Cloneable接口
*
* @author zdw
*
*/
public abstract class AbstractSpoon implements Cloneable
{
public String spoonName;
public String getSpoonName()
{
return this.spoonName;
}
public void setSpoonName(String spoonName)
{
this.spoonName = spoonName;
}
/** *//**
* 重写clone()方法
*/
@Override
public Object clone()
{
try
{
return super.clone();
} catch (CloneNotSupportedException e)
{
System.out.println("此对象不支持复制");
}
return null;
}
}
对原型的具体实现:
package
com.pattern.prototype;
/** */ /**
* 给原型对象赋值
*
* @author zdw
*
*/
public class SoupSpoon extends AbstractSpoon
{
public SoupSpoon()
{
setSpoonName("chinaDrong");
}
}
/** */ /**
* 给原型对象赋值
*
* @author zdw
*
*/
public class SoupSpoon extends AbstractSpoon
{
public SoupSpoon()
{
setSpoonName("chinaDrong");
}
}
测试类:
package
com.pattern.prototype;
/** */ /*******************************************************************************
* 测试类
*
* @author zdw
*
*/
public class Client
{
public static void main(String[] args)
{
AbstractSpoon spoon = new SoupSpoon();
System.out.println(spoon.getSpoonName());
// 通过对象的clone()方法,即可获得对象的一个copy.
AbstractSpoon spoon2 = (AbstractSpoon) spoon.clone();
System.out.println(spoon2.getSpoonName());
}
}
/** */ /*******************************************************************************
* 测试类
*
* @author zdw
*
*/
public class Client
{
public static void main(String[] args)
{
AbstractSpoon spoon = new SoupSpoon();
System.out.println(spoon.getSpoonName());
// 通过对象的clone()方法,即可获得对象的一个copy.
AbstractSpoon spoon2 = (AbstractSpoon) spoon.clone();
System.out.println(spoon2.getSpoonName());
}
}
当然也可以结合工厂模式来创建AbstractSpoon实例。
在Java中Prototype模式变成clone()方法的使用,由于Java的纯洁的面向对象特性,使得在Java中使用设计模式变得很自然,两者已经几乎是浑然一体了。这反映在很多模式上,如Interator遍历模式。