设计模式:原型模式(Prototype)

一、类图

二、模式含义

Prototype(抽象原型类):a.它是声明克隆方法的接口,是所有具体原型类的公共父类,

                                             b.可以是抽象类也可以是接口,甚至还可以是具体实现类。

ConcretePrototype(具体原型类):它实现在抽象原型类中声明的克隆方法,在克隆方法中返回自己的一个克隆对象。

Client(客户类):a.通过调用该对象的克隆方法即可得到多个相同的对象。

                               b.由于客户类针对抽象原型类Prototype编程,因此用户可以根据需要选择具体原型类

三、Java语言提供的clone()方法  

所有的Java类都继承自java.lang.Object。事实上,Object类提供一个clone()方法,可以将一个Java对象复制一份。因此在Java中可以直接使用Object提供的clone()方法来实现对象的克隆,Java语言中的原型模式实现很简单。

 注意:能够实现克隆的Java类必须实现一个标识接口Cloneable,表示这个Java类支持被复制。如果一个类没有实现这个接口但是调用了clone()方法,Java编译器将抛出一个CloneNotSupportedException异常。

Java语言中的clone()方法满足:

              (1) 对任何对象x,都有x.clone() != x,即克隆对象与原型对象不是同一个对象;

              (2) 对任何对象x,都有x.clone().getClass() == x.getClass(),即克隆对象与原型对象的类型一样;

              (3) 如果对象x的equals()方法定义恰当,那么x.clone().equals(x)应该成立。

为了获取对象的一份拷贝,我们可以直接利用Object类的clone()方法,具体步骤如下:

              (1) 在派生类中覆盖基类的clone()方法,并声明为public;

              (2) 在派生类的clone()方法中,调用super.clone();

              (3) 派生类需实现Cloneable接口。

              此时,Object类相当于抽象原型类,所有实现了Cloneable接口的类相当于具体原型类。

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值