java设计模式:原型模式

原型模式(Prototype pattern):用来创建重复对象。即先将创建过的对象缓存起来,当再次需要使用该对象的时候,使用clone的方式获取。这种方式一般适用于创建对象代价较大的情况下,原型模式创建对象的方式属于浅复制(clone),即复制后的对象并不是原对象,指向的地址值不同,复制后的对象的变化不会影响到原对象,还有一种是深复制,深复制是使用二进制流的方式进行复制。

使用原型模式的,则对象必须实现Clonable接口。

下面通过一个简单的示例来演示一下原型模式的工作原理。

1、超类

public abstract class Parent implements Cloneable{

    private String name;
    private String id;

    public Parent(String name, String id) {
        this.name = name;
        this.id = id;
    }

    @Override
    protected Object clone(){
        Object clone = null;
        try {
            clone = super.clone();
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
        }
        return clone;
    }

    //隐藏getter、setter方法
   
}

2、子类

public class Son extends Parent {

    public Son1(String name, String id) {
        super(name, id);
    }
}

3、缓存

public class ClassCache {

    private static Map<String, Parent> map = new ConcurrentHashMap<>();

    public static void addCache(Parent parent) {
        map.put(parent.getId(), parent);
    }

    public static Parent getCache(String id) {
        Parent parent = map.get(id);
        return (Parent) parent.clone();
    }
}

4、测试类

public class MainTest {
    public static void main(String[] args){

        Parent son = new Son1("son1","1");
        ClassCache.addCache(son);    //添加对象入缓存
        Parent sonClone = ClassCache.getCache("1");   //获取对象的clone

        System.out.println(son == sonClone);   //false
        System.out.println(son.getClass().equals(sonClone.getClass()));  //true
    }
}


原型模式clone得到的对象和原对象不是同一个对象,因此 == 得到的结果是false,但是两个对象的getClass方法的结果是一致的,因为两个对象都是同一个类型。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值