原型模式
1、定义
原型模式:使用原型实例指定要创建对象的类型,并且通过复制这个类型来创建新的对象。
2、深克隆与浅克隆
根据在复制原型对象的同时是否复制包含在原型对象中引用类型的成员变量,克隆机制可以分为浅克隆和深克隆。
2.1 浅克隆
简单来说浅克隆就是原型对象被复制时只复制它本身和其中包含的值类型的成员变量,引用类型的成员变量并没有复制。
2.2深克隆
除了对象本身被复制外,对象所包含的所有成员变量也将被复制。
3、原型模式结构
- Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类,它可以是抽象类也可以是接口,甚至可以是具体实现类
- ConcretePrototype(具体原型类):实现抽象原型类中声明的克隆方法,在克隆方法中返回一个克隆对象。
- Client(客户类):让一个原型克隆自身从而创建一个新的对象。
4、实例代码
Prototype
public class Prototype implements Cloneable {
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public Object clone() {
try {
return super.clone();
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
}
ConcretePrototype
public class ConcretePrototype extends Prototype {
public ConcretePrototype(String name) {
setName(name);
}
}
Client
public class Client {
public static void main(String[] args) {
Prototype pro = new ConcretePrototype("prototype");
Prototype pro2 = (Prototype)pro.clone();
System.out.println(pro.getName());
System.out.println(pro2.getName());
}
}
prototype
prototype
5、原型模式的优缺点
5.1优点
- 当创建对象较为复杂时,使用原型模式可以简化对象的创建过程。
- 扩展性较好
- 可以使用深克隆保存对象的状态
5.2缺点
- 需要为每个类配备一个克隆方法,当这个类需要修改时就要修改源代码,违背开闭原则
- 实现深克隆时需要编写较为复杂的代码
6、原型模式的使用环境
- 当一个系统应该独立于它的产品创建、构成和表示时。
- 当要实例化的类是在运行时刻指定时,例如,通过动态装载。
- 为了避免创建一个与产品类层次平行的工厂类层次时。
- 当一个类的实例只能有几个不同状态组合中的一种时。
建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
标签:Prototype,克隆,23,复制,原型,设计模式,public,name From: https://blog.csdn.net/qq_38811830/article/details/139280664