一,原型模式
1.1,对原型模式的理解
原型模式: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
1.2,要解决的问题
主要解决对象的创建问题,提升创建对象的性能。每new一次就会调用一次构造函数,如果构造函数的执行时间很长,多次执行这个初始化操作就要消耗很多时间降低效率。一般在初始化的信息不发生变化的情况下,克隆是最高的方法,这即隐藏了对象创建的细节,又对性能是大大的提升。
1.3,原型模式结构框图
1.4,应用场景
利用原型模式来模拟复印简历,下面的代码是用java 实现
// 简历类
public class Resume implements Cloneable {
private String name;
public Resume(String name){
this.name = name;
}
void setName(String name)
{
this.name = name;
}
// 克隆该实例
public Object clone(){
Resume resume = null;
try {
resume = (Resume) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return resume;
}
}
// 客户端
public class Client
{
public static void main(String[] args)
{
// 张三简历
Resume zhangsan = new Resume("张三");
// 由张三的简历复制出一份李四的简历
Resume lisi = (Resume) zhangsan.clone();
lisi.setName("李四");
}
}
程序分析:
在java中Object类是所有类的根类,所有的Java类都继承自Object,而Object类提供了一个clone()方法,该方法可以将一个java对象复制一份,因此在java中可以直接使用clone()方法来复制一个对象。但是需要实现clone的Java类必须要实现一个接口Cloneable,该接口表示该类能够复制且具体复制的能力,如果不实现该接口而直接调用clone()方法会抛出CloneNotSupportedException异常。
1.5,原型模式的优缺点
优点:
- 如果创建新的对象比较复杂时,可以利用原型模式简化对象的创建过程,同时也能够提高效率。
- 不用重新初始化对象,而是动态地获得对象运行时的状态。
缺点:
- 在实现深克隆的时候可能需要比较复杂的代码。
- 需要为每一个类配备一个克隆方法,而且这个克隆方法需要对类的功能进行通盘考虑,这对全新的类来说不是很难,但对已有的类进行改造时,不一定是件容易的事,必须修改其源代码,违背了“开闭原则”。