原型模式

原型模式

原型模式是最容易理解的设计模式。

原型模式定义:

用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

说直接点,就是创建一个对象的拷贝。

原型模式通用类图:

                                                

客户端(上层模块)想要创建一个已有对象(prototype)的副本,这个对象有一个克隆方法,调用这个方法就会返回一个与它一摸一样的对象,上层模块不必要直到具体类型,只需要直到抽象类即可。

原型模式代码实现:

注意,Java最简单的实现方式就是使用Object的clone()方法。如果不了解这个方法,请看我的另一篇博客点击查看:Java对象克隆

abstract class Prototype implements Cloneable{
    //...

    public Prototype clone() {
        Prototype clone = null;
        try {
            clone = (Prototype) super.clone();
            //...抽象类中的字段的深拷贝
        } catch (CloneNotSupportedException e) {
            e.printStackTrace();
            return null;
        }
        return clone;
    }
}

class ConcretePrototype extends Prototype{
    //...

    private Date date = new Date();

    @Override
    public Prototype clone() {
        ConcretePrototype clone = null;
        clone = (ConcretePrototype) super.clone();

        //深拷贝
        clone.date = (Date) this.date.clone();
        return clone;
    }
}


public class Client {

    static Prototype prototype = new ConcretePrototype();

    public static void main(String[] args) {
        Prototype clone = prototype.clone();
    } 
}

Prototype.clone()用来克隆抽象类中的字段,对于它的子类,如果有新的字段,就要覆写clone()方法。

应用场景以及优点

应用场景

适用于一个对象多个修改者的场景。如果一个对象可能被多个修改者修改,则会有未知的结果,在这样的情况下,修改者修改时,不会直接修改这个对象,而是修改它的副本。

优点

  1. 性能优良:拷贝一个对象,使用的方式是拷贝二进制流,而不是调用new,相比于new,效率更高。
  2. 逃避构造方法(函数)的约束:对象克隆时,构造函数不会被执行,也就不会有约束。(这也是原型模式的缺点)

通常,原型模式与工厂方法模式配合使用,工厂方法返回的是一个通过原型模式产生的对象,又回到了前面说过的工厂方法模式,对于上层来说,不需要知道工厂方法是怎样产生对象,其中一种产生方式就是使用对象克隆

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值