系列文章
【设计模式】七大设计原则
【设计模式】第一章:单例模式
【设计模式】第二章:工厂模式
【设计模式】第三章:建造者模式
【设计模式】第四章:原型模式
【设计模式】第五章:适配器模式
【设计模式】第六章:装饰器模式
【设计模式】第七章:代理模式
【设计模式】第八章:桥接模式
【设计模式】第九章:外观模式 / 门面模式
【设计模式】第十章:组合模式
【设计模式】第十一章:享元模式
【设计模式】第十二章:观察者模式
【设计模式】第十三章:模板方法模式
【设计模式】第十四章:策略模式
【设计模式】第十五章:责任链模式
【设计模式】第十六章:迭代器模式
【设计模式】第十七章:状态模式
【设计模式】第十八章:备忘录模式
【设计模式】第十九章:访问者模式
【设计模式】第二十章:解释器模式
【设计模式】第二十一章:命令模式
【设计模式】第二十二章:中介者模式
文章目录
原型模式
一、定义
摘自百度百科:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。
二、实现方式
原型模式要求对象拥有一个可以克隆自己的方法,如此一来,当通过原型实例创建新对象时,就可以不用关心实例本身,也无需通过new对象来实现。
深克隆与浅克隆的区别
深克隆和浅克隆都是指对象复制的方式,但它们之间有一些区别。
深克隆创建一个新对象,并且将原始对象及其所有嵌套对象的数据复制到新对象中。这意味着,新对象的所有属性都是不同的对象实例。这样,如果你改变原始对象中的任何属性,新对象的对应属性不会受到影响,并且反之亦然。深克隆通常需要更多的时间和资源来复制所有属性和嵌套对象。
浅克隆只会复制原始对象中的所有属性,但是所有嵌套的对象都将是原始对象中相应属性的引用。这意味着,新对象的属性和原始对象中的属性将共享对象实例。因此,如果你在新对象中更改一个嵌套对象的属性,则原始对象中相应的属性也会受到影响,反之亦然。相对于深克隆,浅克隆需要的时间和资源更少,但可能会导致意外的行为,因为对象引用可能会被共享并且相互影响。
原型模式具体有两种实现方式,一种是简单形式,另一种是登记形式。我们就这两种形式来探讨一下原型模式的实现方式。
1.简单形式
(1)角色分类
-
客户(Client)
提出创建对象的请求的角色
-
抽象原型(Prototype)
规定具体原型类要实现的方法
-
具体原型(Concrete Prototype)
真正实现创建对象的角色
(2)UML图
(3)具体实现
抽象原型(Prototype)
public abstract class Prototype {
private String name;
public Prototype(String name){
this.name = name;
}
public String getName(){
return name;
}
public void setName(String name){
this.name = name;
}
/**
* 克隆方法
* @return Prototype
*/
public abstract Prototype clone();
}
具体原型A(Concrete Prototype A)
public class ConcretePrototypeA extends Prototype {
public ConcretePrototypeA (String name) {
super(name);
}
public Prototype clone() {
return new ConcretePrototype(this.name);
}
}