设计模式系列:原型模式

来源:互联网 发布:梦里花落知多少下载txt 编辑:程序博客网 时间:2024/05/16 17:19

一.名称

二.问题(为了解决什么问题)

创建新对象成本较大(如初始化需要占用较长的时间,占用太多的CPU资源或网络资源),新的对象可以通过原型模式对已有对象进行复制来获得,如果是相似对象,则可以对其成员变量稍作修改。

三.解决方案(主要体现在uml和核心代码上)

原型模式的核心在于如何实现克隆方法。

原型模式的简单程度仅次于单例模式和迭代器模式。正是由于简单,使用的场景才非常的多。

类图

这里写图片描述

代码略,非常简单

java中怎么实现原型模式

  • 实现Cloneable接口
  • 重写Object类中的clone方法

原型模式使用时的注意事项

  • 构造函数不会被执行
  • 分清浅拷贝与深拷贝(非常重要)
  • clone和final是两个冤家,这两个属性相互冲突
  • 原型模式可以与工厂方法结合

浅拷贝

在浅拷贝中,如果原型对象的成员变量是值类型,将复制一份给克隆对象,如果原型对象的成员变量是引用类型,则将引用对象的地址复制一份给克隆对象,也就是说原型对象和克隆对象的成员变量指向相同的内存地址。在java语言中,通过覆盖object的clone方法可以实现浅拷贝。

深拷贝

深拷贝是讲所有引用对象也复制一份给克隆对象。简单来讲,在深拷贝中,除了对象本身被复制外,对象所包含的所有成员变量也将被复制。在java语言中,如果要实现深克隆,可以通过序列化等方式来实现。

四.效果(有啥优缺点)

优点:
1. 性能优良
2. 逃避构造函数的约束
3. 在创建新的对象实例较为复杂时,使用原型模式可以简化对象的创建过程,通过复制一个已有实例可以提高新实例的创建效率。

缺点:
1. 在实现深克隆时需要编写较为复杂的代码,而且当对象之间存在多重的嵌套引用时,为了实现深克隆,每一层对象对应的类都必须支持深克隆,实现起来可能会比较麻烦。

常见案例

周报格式大同小异

0 0
原创粉丝点击