1、 实例概况
有一个画板,可以从中取得两种图形:圆形(circle)和矩形(rectangle),它们都属于原型(prototype),当客户需要画一个图形时便从画板中取一个图形,在这个问题中,原型模式的关键在于画板克隆一个图形对象,然后返回给客户。
2、实例类图
3、实例实现代码
3.1抽象原型类ZC32Graph
public interface ZC32Graph extends Cloneable{
public Object clone();
public String getName();
public void draw();
}
3.11具体原型类ZC32Rectangle
public class ZC32Rectangle implements ZC32Graph{
public Object clone(){
Object clone= null ;
try {
clone= (Object)super.clone();
} catch (CloneNotSupportedException e){
}
return clone;
}
public String getName(){
return "Rectangle" ;
}
public void draw(){
System.out.println( "Draw a rectangle" );
}}
3.12具体原型类ZC32Circle
public class ZC32Circle implements ZC32Graph{
public Object clone(){
Object clone= null ;
try {
clone= (Object)super.clone();
} catch (CloneNotSupportedException e){
}
return clone;
}
public String getName(){
return "circle" ;
}
public void draw(){
System.out.println("Draw a circle");
}
}
3.2原型管理器类ZC32Manager
package yuanxingmoshi;
import java.util.HashMap;
import java.util.Hashtable;
public class ZC32Manager {
private HashMap ht =new HashMap();
public ZC32Manager(){
ht.put( "circle", new ZC32Circle());
ht.put( "rectangle", new ZC32Rectangle());
}
public Object getClone(String key){
Object obj = ht.get(key);
if (obj!= null ) return ((ZC32Graph)obj).clone();
return null ;
}}
3.3客户端测试类ZC32Client
public class ZC32Client {
public static void main(String[] args){
ZC32Manager ma = new ZC32Manager();
ZC32Graph obj1=(ZC32Graph)ma.getClone( "circle" );
obj1.draw();
ZC32Graph obj2=(ZC32Graph)ma.getClone( "rectangle" );
obj2.draw();
}
}
4、结果