原型模式定义:
用原型实例指定建立对象的种类,而且经过拷贝这些原型建立新的对象.java
Prototype模式容许一个对象再建立另一个可定制的对象,根本无需知道任何如何建立的细节,工做原理是:经过将一个原型对象传给那个要发动建立的对象,这个要发动建立的对象经过请求原型对象拷贝它们本身来实施建立。c#
如何使用?
由于Java中的提供clone()方法来实现对象的克隆,因此Prototype模式实现一会儿变得很简单.测试
import java.util.Hashtable; 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; } }
public class LineSymbol extends Graphic { public LineSymbol() { } public void DoSomething() { System.out.println("I am used to draw a line !"); } }
public class NoteSymbol extends Graphic { public NoteSymbol() { } public void DoSomething() { System.out.println("I am used to draw a note !"); } }
public interface IGraphic extends Cloneable, Serializable { public String getName() ; public void setName(String gName); }
public abstract class Graphic implements IGraphic { private String name; public Object clone() { try { return super.clone(); } catch (CloneNotSupportedException e){ System.out.println("Do not support clone !!!"); throw new InternalError(); } } /* (non-Javadoc) * @see corner.dp.create.Prototype.mypackage.IGraphic#getName() */ public String getName() { return name; } /* (non-Javadoc) * @see corner.dp.create.Prototype.mypackage.IGraphic#setName(java.lang.String) */ public void setName(String gName) { name = gName; } public abstract void DoSomething(); }测试代码:
public class GraphicTool { public static void main(String[] args) { //----- Initial our prototype instance ---------- SymbolLoader myLoader = new SymbolLoader(); Hashtable mySymbols = myLoader.getSymbols(); //----- Draw a Line ------------------------------- Graphic myLine = (Graphic)((Graphic)mySymbols.get("Line")).clone(); myLine.DoSomething(); } }