设计模式(3)—— Prototype(原型)

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...");
    }
}

用一个Store保存颜色:
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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值