Java设计模式之 原型模式,简单易于理解

原型模式

一、概念

原型模式(Prototype Pattern)是用于创建重复的对象,同时又能保证性能。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。
因为Java中的提供clone()方法来实现对象的克隆,所以Prototype模式实现一下子变得很简单。

二、代码解析:

1、创建一个student类,包含一下属性
在这里插入图片描述
2、赋值输出在这里插入图片描述
3、第一种复制方式,直接使student2=student1,如下
在这里插入图片描述
4、使用克隆的方法
第一步:实现Cloneable接口,

在这里插入图片描述
第二步:重写Object类Clone方法
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
改成student的克隆
在这里插入图片描述
5、现在给student3克隆一个student1
在这里插入图片描述
克隆成功,s1和s3的地址是不一样的,只是值一样,同样也可以给s3修改属性值,比如把名字从张三改成李四
在这里插入图片描述
以上是浅度克隆,下面再来看看深度克隆,给student加一个数组
在这里插入图片描述
给数组set值并get
在这里插入图片描述
克隆后运行,发现数组的地址是同一个。
在这里插入图片描述
下面改造一下实现让克隆后的数组的地址也不一样
回到student类中手动改造一下克隆的代码

在这里插入图片描述
改造后再执行,地址不一样了。
在这里插入图片描述

三、原型模式的优点:

1)由于clone方法是由虚拟机直接复制内存块执行,所以在速度上比使用new的方式创建对象要快。
2)当创建的对象实例较为复的时候,使用原型模式可以简化对象的创建过程。
3)可以在运行时动态的获取对象的类以及状态,从而创建一个对象

四、原型模式的缺点

1)需要为每一个快配备一个克隆方法,而且该克隆方法位于一个类的里面,当对已有的类经行改造时需要修改源代码,违背了开闭原则。
2)在实现深克降的时需要编写较为复杂的代码,而且当对象之间存在多重嵌套引用的时候,为了实现深克隆,每一层对象对应的类都必须支持深克隆,实现相对麻烦。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章