千锋杭州大数据培训教程:如何理解Java原型模式?
今天千锋杭州大数据培训讲师给大家分享如何理解Java原型模式?原型模式(Prototype Pattern)是首先创建一个原型对象,再通过复制这个原型对象来创建更多同类型的对象。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
这种模式是实现了一个原型接口,该接口用于创建当前对象的克隆。当直接创建对象的代价比较大时,则采用这种模式。例如,一个对象需要在一个高代价的数据库操作之后被创建。我们可以缓存该对象,在下一个请求时返回它的克隆,在需要的时候更新数据库,以此来减少数据库调用。
在原型模式结构图中包含如下几个角色:
1.Prototype(抽象原型类):它是声明克隆方法的接口,是所有具体原型类的公共父类,可以是抽象类也可以是接口,甚至还可以是具体实现类。
2.ConcretePrototype(具体原型类):它实现在抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。
3.Client(客户类):让一个原型对象克隆自身创建一个新的对象,在客户类中只需要直接实例化或通过工厂方法等方式创建一个原型对象,再通过调用该对象的克隆方法即可得到多个相同的对象。由于客户类针对抽象原型类Prototype编程,因此用户可以根据需要选择具体原型类,系统具有较好的可扩展性,增加或更换具体原型类都很方便。
原型模式的核心在于如何实现克隆方法,下面将介绍两种在Java语言中常用的克隆实现方法:
1.通用实现方法。通用的克隆实现方法是在具体原型类的克隆方法中实例化一个与自身类型相同的对象并将其返回,并将相关的参数传入新创建的对象中,保证它们的成员属性相同。示意代码如下所示:
class ConcretePrototype implements Prototype{private String attr; //成员属性
public void setAttr(String attr)
{this.attr = attr;}public String getAttr()
{return this.attr;}
public Prototype clone() //克隆方法
{Prototype prototype = new ConcretePrototype(); //创建新对象
prototype.setAttr(this.attr);
return prototype;}}
2. Java语言提供的clone()方法。学过Java语言的人都知道,所有的Java类都继承自java.lang.Object。事实上,Object类提供一个clone()方法,可以将一个Java对象复制一份。因此在Java中可以直接使用Object提供的clone()方法来实现对象的克隆,Java语言中的原型模式实现很简单。
需要注意的是能够实现克隆的Java类必须实现一个标识接口Cloneable,表示这个Java类支持被复制。如果一个类没有实现这个接口但是调用了clone()方法,Java编译器将抛出一个CloneNotSupportedException异常。如下代码所示:
class ConcretePrototype implements Cloneable
{……public Prototype clone(){Object object = null;try {object = super.clone();} catch (CloneNotSupportedException exception)
{System.err.println("Not support cloneable");}
return (Prototype )object;}……}
在客户端创建原型对象和克隆对象也很简单,如下代码所示:
Prototype obj1 = new ConcretePrototype();
Prototype obj2 = obj1.clone();
一般而言,Java语言中的clone()方法满足:
1)对任何对象x,都有x.clone() != x,即克隆对象与原型对象不是同一个对象;
2)对任何对象x,都有x.clone().getClass() == x.getClass(),即克隆对象与原型对象的类型一样;
3)如果对象x的equals()方法定义恰当,那么x.clone().equals(x)应该成立。为了获取对象的一份拷贝,我们可以直接利用Object类的clone()方法,具体步骤如下:
a.在派生类中覆盖基类的clone()方法,并声明为public;
b.在派生类的clone()方法中,调用super.clone();
c.派生类需实现Cloneable接口。
此时,Object类相当于抽象原型类,所有实现了Cloneable接口的类相当于具体原型类。
大数据的前景是毋庸置疑的,如果想进入这个"吸金"的领域,选择千锋大数据培训机构是明智之举。千锋大数据培训课程内容不断更新升级,让学生学到更加贴合企业需求和项目应用的一些高端技术,势必能进一步提高学生竞争力,为学员的高薪就业以及未来的发展保驾护航!

猜你喜欢LIKE
相关推荐HOT
更多>>
前端开发是做什么的?学会了好就业吗
前端开发是现在非常热火的一个词,但是很多人并不了解前端开发是做什么的,其实如果对于网页制作有了解的学员,会发现前端开发有很多关于网页制...详情>>
2023-02-09 15:39:51
java开发用什么软件比较靠谱?有哪些常用的
随着互联网的加速发展,java开发也成了当前时代的热门行业之一,很多人都想通过学习java开发技术,开拓新的就业渠道,帮助自己实现财富增值,但...详情>>
2023-02-08 14:48:59
杭州python培训完工资怎么样?
Python开发哪里都说好,但是到底有多好呢?小千今天就来带大家拿数据看一下杭州的Python开发能拿到多少的工资。详情>>
2020-12-09 14:16:00
杭州python培训机构面授多少钱?
有在杭州的小伙伴想要了解一下本地的面授Python培训班需要多少钱的学费,这里小千就来给大家介绍一下,以供大家在挑选培训班的时候参考。详情>>
2020-12-04 14:25:00热门推荐
5种方法教你如何利用新媒体进行内容营销和产品推广
沸Java培训一般需要多久?课程结束学不会怎么办?
热编程培训一般多少钱?怎么选择编程培训学校?
热学习python有什么用?常见用途介绍
新java和python的区别?java和python各自的优势是什么
ui设计分为哪几种?分别有什么特点
python培训费用要多少,哪家培训质量更高
学程序员大概多少钱?到哪里学比较好
计算机学前端好还是后端好?需不需要去培训
前端开发培训需要多长时间?去哪里培训好
前端开发工程师需要学什么?怎么学
web前端能干一辈子吗?到哪里培训比较好
现在学前端开发靠谱吗?需不需要去培训
前端培训班一般多少钱?营销价格的因素有哪些