Prototype模式能干什么?
原型(prototype)用于指定创建对象的种类,并且通过复制这些原型创建新的对象,典型的例子就是细胞分裂,一个细胞分裂成两个一模一样的细胞。
Prototype模式的使用
当系统应该独立于它的产品创建、构成和表示时;
当要实例化的类是在运行时刻指定时。
等
使用场合:
1. 迷宫游戏。游戏里面的门,墙等,用原型创建更快,且通过修改原型后可修改迷宫。
2. 对数据库的数据进行分析时。如果我们有两个应用分析数据库的数据,那么使用克隆直接克隆第一次分析的对象,比重新读数据库更好。
Implement了Cloneable接口类,实现Clone()。您可以根据业务需要进行Deep克隆或者shallow克隆
颜色:
public abstract class Color implements Cloneable {
protected String colorName;
abstract void fillColor();
public Object clone(){
Object clone = null;
try {
clone = super.clone();
} catch (CloneNotSupportedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return clone;
}
}
红色:
public class RedColor extends Color{
public RedColor() {
this.colorName = "RED";
}
@Override
void fillColor() {
System.out.println("filling red color...");
}
}
绿色:
public class GreenColor extends Color{
public GreenColor() {
this.colorName = "Green";
}
@Override
void fillColor() {
System.out.println("filling green color...");
}
}
import java.util.HashMap;
import java.util.Map;
public class ColorStore {
private static Map<String, Color> colorMap = new HashMap<String, Color>();
static {
colorMap.put("red", new RedColor());
colorMap.put("green", new GreenColor());
}
public static Color getColor(String colorName){
return (Color) colorMap.get(colorName).clone();
}
}
测试代码:
public class PrototypeTest {
public static void main(String a[]){
ColorStore.getColor("red").fillColor();
ColorStore.getColor("green").fillColor();
ColorStore.getColor("green").fillColor();
ColorStore.getColor("red").fillColor();
}
}
链接:http://java2novice.com/java-design-patterns/prototype-pattern/
http://www.oodesign.com/prototype-pattern.html