五、原型模式(Prototype Pattern)
1. 什么是原型模式(Prototype Pattern)
在需要创建大量相同或者相似的对象时,先创建一个原型对象,然后利用这个原型对象进行克隆,从而得到大量对象
- java中可以利用Object中的clone()方法快速实现克隆
- 克隆分为深克隆和浅克隆
- 浅克隆:只拷贝对象本身(包括对象中包含的基本类型),而对象中的其他依赖对象则不进行拷贝(Object中的clone()方法便是浅克隆)
- 深克隆:不仅拷贝对象本身,连同对象中其他的依赖对象一并拷贝
2. 原型模式(Prototype Pattern)的适用场景
- 适用于创建大量相同或者相似的对象
- 需要在创建的对象群中默认初始化一部分属性
3. 原型模式(Prototype Pattern)的角色组成
原型对象:被克隆的对象原型
4. 代码示例
- 原型对象:
package com.lt.patterns.prototype;
/**
* @author lt
* @date 2019年4月15日
* @version v1.0
*/
public class PrototypeCar implements Cloneable{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public String toString() {
return "Car [name=" + name + "]";
}
/**
* 将方法范围由protected变成public
*/
@Override
public PrototypeCar clone() throws CloneNotSupportedException {
return (PrototypeCar) super.clone();
}
}
- 客户端
package com.lt.patterns.client;
import com.lt.patterns.prototype.PrototypeCar;
/**
* 原型模式:利用java中的clone()方法进行创建同样的对象
* @author lt
* @date 2019年4月15日
* @version v1.0
*/
public class Client {
public static void main(String[] args) throws CloneNotSupportedException {
PrototypeCar prototype = new PrototypeCar();
prototype.setName("BMW");
for(int i=0; i<5; i++){
PrototypeCar c = prototype.clone();
//hashcode不同,即为不同对象
System.out.println("hashcode:"+c.hashCode()+",name:"+c.getName());
}
}
}
5. 原型模式(Prototype Pattern)的特点
- 优点:
- 可以快速创建大量相同或者相似的对象
- 缺点: