1.模式动机
在有些系统中,存在大量相同或相似对象的创建问题,如果用传统的构造函数来创建对象,会比较复杂且耗时耗资源,用原型模式生成对象就很高效,就像孙悟空拔下猴毛轻轻一吹就变出很多孙悟空一样简单。
简单粗暴的理解就是:创建一个对象当做模板,然后利用这个模板使用clone
方法快速的创建一个新的对象。
2.模式定义
原型模式的定义如下:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。用这种方式创建对象非常高效,根本无须知道对象创建的细节。
3.模式代码
使用 Java 中提供的clone
方法实现原型模式非常简单。但是要注意浅克隆和深克隆,这里就不具体说这两个名词了。
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;
@Getter
@Setter
@ToString
public class User implements Cloneable{
private String name;
public User(String name) {
this.name = name;
}
@Override
protected User clone() throws CloneNotSupportedException {
System.out.println("原型对象复制成功");
return (User) super.clone();
}
}
public class Client {
public static void main(String[] args) throws CloneNotSupportedException {
User user = new User("Mike");
System.out.println(user);
User cloneUser = user.clone();
System.out.println(cloneUser);
}
}
运行结果:
User(name=Mike)
原型对象复制成功
User(name=Mike)
4.总结
原型模式通常适用于以下场景:
- 对象之间相同或相似,即只是个别的几个属性不同的时候。
- 对象的创建过程比较麻烦,但复制比较简单的时候。