java设计模式之原型模式(5)

来源:互联网 发布:淘宝是日本人的吗 编辑:程序博客网 时间:2024/05/30 23:02

原型模式也是一种创建型模式, 只不过他创建的对象是通过克隆来实现。为什么要通过克隆而不是new呢?

举个例子:比如一个对象的创建需要读取本地文件(Excel)中的信息,而且需要读很多个excel的信息
才能创建成功。这时候创建一个对象的成本是很高的。如果每次都new的话是行不通的。这时候原型模式就

派上用场了。我们不重新new一个对象,而是通过之前的对象进行克隆一个。

看代码:

package com.pattern.build.prototype;public abstract class Prototype {protected String name;public abstract Prototype copy();public String getName() {return name;}public void setName(String name) {this.name = name;}}


package com.pattern.build.prototype;public class ConcretePrototype extends Prototype {@Overridepublic Prototype copy() {ConcretePrototype cp = new ConcretePrototype();cp.setName(this.getName());return cp;}}


 

package com.pattern.build.prototype;public class Client {public static void main(String[] args) {Prototype p = new ConcretePrototype();p.setName("aaa");Prototype copy = p.copy();System.out.println(copy.getName());}}

对象拷贝分为浅拷贝和深拷贝。

浅拷贝:
至拷贝值,不拷贝引用。如果一个对象包含梁一个对象的引用,那么此引用是不会被拷贝(拷贝前后都是指向同一块内存)。

深拷贝:
即拷贝值,也拷贝引用。可以利用序列化实现深拷贝。

java的Object对象中有clone这个方法。也就是所有的类的对象都有clone方法。但是如果这个类没有实现Cloneable

接口,调用clone方法的时候就会抛出CloneNotSupportedException异常。


 

0 0
原创粉丝点击