原型模式(Prototype pattern)

    原型模式多用于创建复杂的或者耗时的实例,因为这种情况下,复制一个已经存在的实例使程序运行更高效;或者创建值相等,只是命名不一样的同类数据。


    Prototype原型模式是一种创建型设计模式,它主要面对的问题是:“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是他们却拥有比较稳定一致的接口。下面我们先来看下关联的的几种设计模式,予以区分,再来说说原型模式。

    • Singleton单件模式解决的问题是:实体对象个数问题(这个现在还不太容易混)
    • AbstractFactory抽象工厂模式解决的问题是:“一系列互相依赖的对象”的创建工作
    • FactoryMethor工厂方法模式解决的问题是:某个对象的创建工作。

    例子

    现在我们再来看看原型模式的几个要点:

    • Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有“稳定的接口”。
    • Prototype模式中的Clone方法可以利用Object类的MemberwiseClone()或者序列化来实现深拷贝。

    正如上面的代码所示,通过原型模式定义的方法sayName()为所有的实例所共享。也就是, person1和person2访问的是同一个sayName()函数。同样的,公共属性也可以使用原型模式进行定义。例如:

    //TODO clone的原理()

    JAVA的clone()实现机制涉及到了反射、IO流操作、序列化等。