原型模式
一.一般实现
1.1 创建对象
public class Entity {
public Entity(){
System.out.println("create entity ...");
}
}
1.2 调用
public static void main(String[] args) {
new Entity();
}
1.3 输出
create entity ...
1.4 缺点
- 如需大量创建某对象,对象创建效率,性能低.
- 创建对象收访问权限的限制.
二.原型模式
2.1 定义
- 用原型实例指定创建对象的种类,并通过拷贝这些原型创建新的对象.
2.2 条件
- 实现Cloneable接口.
- 重写Object的clone方法.
2.3 浅拷贝与深拷贝
- 浅拷贝:只拷贝对象中的基本数据类型和String类型.
- 深拷贝:可拷贝对象中的对象类型,集合类型(集合类基本都有自己的clone方法).
三.代码实现
3.1 创建接口
public interface IEntity extends Cloneable{
Object clone();
}
3.2 创建对象
public class Entity implements IEntity{
public Entity(){
System.out.println("create entity ...");
}
@Override
public Object clone() {
Entity entity = null;
try {
entity = (Entity) super.clone();
} catch (CloneNotSupportedException e) {
e.printStackTrace();
}
return entity;
}
}
3.3 调用
public static void main(String[] args) {
IEntity entity1 = new Entity();
IEntity entity2 = (IEntity) entity1.clone();
System.out.println(entity1.hashCode());
System.out.println(entity2.hashCode());
}
3.4 输出
create entity ...
1956725890
356573597
四.源码
https://github.com/Seasons20/DisignPattern.git
END