/*
* A MyGraphics Interface ( A prototype interface )
* 定义一个接口,即原型实例,用MyGraphics定义创建对象的种类
* 这里定义了接口实现Cloneable,方便以后使用的时间可以通过Clone来创建新的对象
*/
import java.io.*;
public interface MyGraphics extends Cloneable, Serializable {
public String getName() ;
public void setName(String gName);
public Object clone();
public void doSomething();
}
/*
* An Abstract MyGraphicImpl Class ( Prototype )
* 这个类主要实现接口中的Clone() 方法
*
*/
import java.lang.*;
import java.io.*;
public abstract class MyGraphicsImpl implements MyGraphics {
private String name;
public Object clone() {
try {
return super.clone();
} catch (CloneNotSupportedException e){
System.out.println("Do not support clone !!!");
throw new InternalError();
}
}
public String getName() {
return name;
}
public void setName(String gName) {
name = gName;
}
public abstract void doSomething();
}
/*
* A concrete prototype to draw a line
* 一个具体的实例,做子类需要做的事情
*/
public class LineSymbol extends MyGraphicsImpl {
public LineSymbol() {
}
public void doSomething() {
System.out.println("I am used to draw a line !");
}
}
/*
* A concrete prototype to draw a note
* 另外一个具体的实例,做它需要做的事情
*/
public class NoteSymbol extends MyGraphicsImpl {
public NoteSymbol() {
}
public void doSomething() {
System.out.println("I am used to draw a note !");
}
}
/*
* A Symbol Loader to register all prototype instance
* 定义一个装载类,以注册所有的原型实例
*/
import java.util.*;
public class SymbolLoader {
private Hashtable symbols = new Hashtable();
public SymbolLoader() {
symbols.put("Line", new LineSymbol());
symbols.put("Note", new NoteSymbol());
}
public Hashtable getSymbols() {
return symbols;
}
}
/*
* As a Test Client to test our pattern
* 测试类,测试我们的结果,通过Clone创建子类的实例
*/
import java.util.*;
import java.lang.*;
public class GraphicTool {
public GraphicTool() {
}
public static void main(String[] args) {
//初始化我们的原型实例
SymbolLoader myLoader = new SymbolLoader();
Hashtable mySymbols = myLoader.getSymbols();