说明:由于本人是一个初学者,所以博客中用到的一些见解、图片、代码或者说明可能引用网络上面的资源,如果涉及到了侵权的问题请大家联系我进行删除。

这一篇博客主要记录了Prototype(原型)模式的学习,Prototype模式同样属于对象创建模式,只是没有工厂方法和抽象工厂那两个模式应用的那么广泛,而且也比较简单。


动机

在软件系统中,经常面临着“某些结构复杂的对象”的创建工作;由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口。

如何应对这些变化?如何向“客户程序(使用这些对象的程序)”隔离出这些“易变对象”,从而使得“依赖这些易变对象的客户程序”不随着需求改变而改变?


模式定义

使用原型实例指定创建对象的种类,然后通过拷贝这些原型来创建新的对象。


举例

原型模式的结构图如下所示:
设计模式学习(八):Prototype
接下来我们来看一个例子:
用原型模式模拟“孙悟空”复制自己。

分析:孙悟空拔下猴毛轻轻一吹就变出很多孙悟空,这实际上是用到了原型模式。这里的孙悟空类 SunWukong 是具体原型类,而 Java 中的 Cloneable 接口是抽象原型类。

本例中重写了 Cloneable 接口的 clone() 方法,用于复制新的孙悟空。访问类可以通过调用孙悟空的 clone() 方法复制多个孙悟空。本例的结构图如下所示:
设计模式学习(八):Prototype


要点总结

Prototype模式同样用于隔离类对象的使用者和具体类型(易变类)之间的耦合关系,它同样要求这些“易变类”拥有“稳定的接口”。

Prototype模式对于“如何创建易变类的实体对象”采用“原型克隆”的方法来做,它使得我们可以非常灵活地动态创建“拥有某些稳定接口“的新对象——所需工作仅仅是注册一个新类的对象(即原型),然后在任何需要的地方Clone。

Prototype模式中的Clone方法可以利用某些框架中的序列化来实现深拷贝。


ps: 原型模式中应该使用深拷贝

相关文章:

  • 2022-12-23
  • 2021-11-13
  • 2021-10-24
  • 2021-11-10
  • 2021-10-24
  • 2021-07-07
猜你喜欢
  • 2021-12-21
  • 2021-06-21
  • 2021-06-09
  • 2022-01-08
  • 2022-12-23
  • 2021-10-26
  • 2022-01-21
相关资源
相似解决方案