【设计模式】第四章:原型模式详解及应用案例

系列文章

【设计模式】七大设计原则
【设计模式】第一章:单例模式
【设计模式】第二章:工厂模式
【设计模式】第三章:建造者模式
【设计模式】第四章:原型模式
【设计模式】第五章:适配器模式
【设计模式】第六章:装饰器模式
【设计模式】第七章:代理模式
【设计模式】第八章:桥接模式
【设计模式】第九章:外观模式 / 门面模式
【设计模式】第十章:组合模式
【设计模式】第十一章:享元模式
【设计模式】第十二章:观察者模式
【设计模式】第十三章:模板方法模式
【设计模式】第十四章:策略模式
【设计模式】第十五章:责任链模式
【设计模式】第十六章:迭代器模式
【设计模式】第十七章:状态模式
【设计模式】第十八章:备忘录模式
【设计模式】第十九章:访问者模式
【设计模式】第二十章:解释器模式
【设计模式】第二十一章:命令模式
【设计模式】第二十二章:中介者模式



原型模式

一、定义

摘自百度百科:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。


二、实现方式

原型模式要求对象拥有一个可以克隆自己的方法,如此一来,当通过原型实例创建新对象时,就可以不用关心实例本身,也无需通过new对象来实现。

深克隆与浅克隆的区别

深克隆和浅克隆都是指对象复制的方式,但它们之间有一些区别。

深克隆创建一个新对象,并且将原始对象及其所有嵌套对象的数据复制到新对象中。这意味着,新对象的所有属性都是不同的对象实例。这样,如果你改变原始对象中的任何属性,新对象的对应属性不会受到影响,并且反之亦然。深克隆通常需要更多的时间和资源来复制所有属性和嵌套对象。

浅克隆只会复制原始对象中的所有属性,但是所有嵌套的对象都将是原始对象中相应属性的引用。这意味着,新对象的属性和原始对象中的属性将共享对象实例。因此,如果你在新对象中更改一个嵌套对象的属性,则原始对象中相应的属性也会受到影响,反之亦然。相对于深克隆,浅克隆需要的时间和资源更少,但可能会导致意外的行为,因为对象引用可能会被共享并且相互影响。

原型模式具体有两种实现方式,一种是简单形式,另一种是登记形式。我们就这两种形式来探讨一下原型模式的实现方式。

1.简单形式

(1)角色分类

  • 客户(Client)

    提出创建对象的请求的角色

  • 抽象原型(Prototype)

    规定具体原型类要实现的方法

  • 具体原型(Concrete Prototype)

    真正实现创建对象的角色

(2)UML图

Image.png

(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);
  }
}
具体原型B(Conc
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Bummon.

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值