原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。
结构图
角色与理解
- 原型模式共有以下几种角色:
- Prototype(抽象原型类)定义clone方法的接口,类型为接口、抽象类或者具体的类,是所有具体原型类的父类
- ConcretePrototype(具体原型类)实现clone方法的实现了,可以为多个类,提供不同的clone方式
- Client(客户类)让一个原型对象复制新的对象
- 原型方法的核心是如何实现clone方法,不同的clone方法最终的效果也是不一样的
深拷贝与浅拷贝
- 浅拷贝(ShallowClone):当对象被复制时,只复制对象本身与值类型的成员变量,引用类型的成员变量没有被复制
- 深拷贝(DeepClone):当对象被复制时,对象本身、值类型成员变量、引用类型成员变量都会被复制,原型对象与复制对象完全独立
核心代码