您的位置:首页 > 编程语言 > Java开发

Java设计模式-5-原型模式

2015-02-24 18:19 239 查看
一、介绍

原型模式主要用于对象的复制,它的核心是就是类图中的原型类Prototype。Prototype类需要具备以下两个条件:

1、实现Cloneable接口。

2、重写Object类中的clone方法。

二、UML类图






三、代码实现

class Prototype implements Cloneable {
public Prototype clone() {
Prototype prototype = null;
try {
prototype = (Prototype) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return prototype;
}
}

class ConcretePrototype extends Prototype {
public void show() {
System.out.println("原型模式实现类");
}
}

public class Client {
public static void main(String[] args) {
ConcretePrototype cp = new ConcretePrototype();
for (int i = 0; i < 10; i++) {
ConcretePrototype clonecp = (ConcretePrototype) cp.clone();
clonecp.show();
}
}
}


四、其他

4.1、深拷贝与浅拷贝:
Object类的clone()方法只会拷贝对象中的基本的数据类型,对于数组、容器对象、引用对象等都不会拷贝,这就是浅拷贝。【会发生深拷贝的有Java中的8种基本类型以及他们的封装类型,另外还有String类型,其余的都是浅拷贝。】如果要实现深拷贝,必须将原型模式中的数组、容器对象、引用对象等另行拷贝。例如:

public class Prototype implements Cloneable {
private ArrayList list = new ArrayList();
public Prototype clone(){
Prototype prototype = null;
try{
prototype = (Prototype)super.clone();
prototype.list = (ArrayList) this.list.clone();
}catch(CloneNotSupportedException e){
e.printStackTrace();
}
return prototype;
}
}
由于ArrayList不是基本类型,所以成员变量list,不会被拷贝,需要我们自己实现深拷贝。但,Java提供的大部分容器类都已经实现了Cloneable接口,所以实现深拷贝not very difficult。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: