您的位置:首页 > 其它

设计模式-创建型模式-原型

2011-04-21 08:37 260 查看
创建型模式:抽象了实例化过程,它们帮助一个系统如何独立于如何创建、组合和表示它的哪些对象。一个创建型模式使用了继承改变实例化的类,而一个对象的实例化将委托给别一个对象来现实。

prototype模式: 用原型实例指定创建对象的种类,并且通过这些原型创建新的对象.

适用性: 1、当一个系统应该独立于它的产品创建,构成、和表示时

2、当一个实例化的类是在运行时刻指定的

3、为了避免创建一个和产品类层次平行的工厂类层次

4、当一个类实例只能有几个不同状态组合中的一种时

代码:

package prototype.mypackage;

import java.io.*;

public interface IGraphic extends Cloneable, Serializable {

public String getName();

public void setName(String gName);
}

package prototype.mypackage;
import java.lang.*;
import java.io.*;

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();
}
}

public String getName() {
return name;
}

public void setName(String gName) {
name = gName;
}

public abstract void DoSomething();
}

package prototype;

import prototype.mypackage.Graphic;

public class LineSymbol extends Graphic {

/**
*
*/
private static final long serialVersionUID = -5414856753222243031L;

public LineSymbol() {
}

public void DoSomething() {
System.out.println("I am used to draw a line !");
}
}

package prototype;

import prototype.mypackage.Graphic;

public class NoteSymbol extends Graphic {

public NoteSymbol() {
}

public void DoSomething() {
System.out.println("I am used to draw a note !");
}
}

package prototype;

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;
}
}

import java.util.*;
import java.lang.*;

import prototype.mypackage.Graphic;

public class GraphicTool {

public 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();
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: