java设计模式之原型模式(5)
2014-07-28 13:56
411 查看
原型模式也是一种创建型模式, 只不过他创建的对象是通过克隆来实现。为什么要通过克隆而不是new呢?
举个例子:比如一个对象的创建需要读取本地文件(Excel)中的信息,而且需要读很多个excel的信息
才能创建成功。这时候创建一个对象的成本是很高的。如果每次都new的话是行不通的。这时候原型模式就
派上用场了。我们不重新new一个对象,而是通过之前的对象进行克隆一个。
看代码:
对象拷贝分为浅拷贝和深拷贝。
浅拷贝:
至拷贝值,不拷贝引用。如果一个对象包含梁一个对象的引用,那么此引用是不会被拷贝(拷贝前后都是指向同一块内存)。
深拷贝:
即拷贝值,也拷贝引用。可以利用序列化实现深拷贝。
java的Object对象中有clone这个方法。也就是所有的类的对象都有clone方法。但是如果这个类没有实现Cloneable
接口,调用clone方法的时候就会抛出CloneNotSupportedException异常。
举个例子:比如一个对象的创建需要读取本地文件(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 { @Override public 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异常。
相关文章推荐
- Java设计模式(11) —— 原型
- java设计模式---Prototype Pattern---原型模式(复制建立对象)
- java设计模式(五)创建者模式和原型模式
- JAVA设计模式(5)-原型模式 Prototype
- Java设计模式 创建模式-原型模式(Prototype)
- Java设计模式(二)Prototype(原型),Builder和Singleton(单态)
- java设计模式(原型模式)
- 设计模式(五)----- 原型模式(Prototype)----(JAVA版)
- JAVA设计模式五--Prototype(原型模式)
- Java与设计模式(05)--原型模式
- java 设计模式学习笔记(8) - 原型模式
- java设计模式--原型设计模式 Prototype
- Java设计模式 - Prototype(原型模式)
- JAVA设计模式 — 原型模式(Prototype)
- Java设计模式:Prototype(原型)
- java设计模式连载(4) --原型模式
- java23种设计模式之原型模式(Prototype)
- java设计模式--原型设计模式 Prototype
- java设计模式——原型模式(Prototype)
- Java:设计模式之原型模式(Prototype)