前言
《设计模式自习室》系列,顾名思义,本系列文章带你温习常见的设计模式。主要内容有:
- 该设计模式的详细介绍,包括: 引子,意图(大白话解释) 类图,时序图(理论规范)
- 该模式的代码示例:熟悉该模式的代码长什么样子
- 该模式的优缺点:不可以滥用模式
- 该模式的实际使用案例:了解它在哪些重要的源码中出现过
该系列会逐步更新于我的博客和公众号(博客见文章底部)
也希望各位观众老爷能够关注我的个人公众号:后端技术漫谈,不会错过精彩好看的文章。
系列文章回顾
- 【设计模式自习室】开篇:为什么我们要用设计模式?
- 【设计模式自习室】建造者模式
原型模式 Prototype
引子
还记得深克隆和浅克隆的区别吗?其实这里说的克隆,就是原型模式。
原型模式要求对象实现一个可以克隆自身的接口(类型)。这样一来,通过原型实例创建新的对象。
原型模式也属于创建型模式。
意图
原型模式有两种表现形式:
- 简单形式
- 登记形式
他们的区别在于:第二种登记模式中,多了一个原型管理器(PrototypeManager)角色,该角色的作用是:创建具体原型类的对象,并记录每一个被创建的对象。
如果需要创建的原型对象数目较少而且比较固定的话,可以采取简单形式。在这种情况下,原型对象的引用可以由客户端自己保存。
否则,你可以使用登记形式。原型管理器的作用:
在登记形式下,客户端不保存对原型对象的引用,这个任务被交给原型管理器角色。在克隆一个对象之前,客户端可以查看管理员对象是否已经有一个满足要求的原型对象。如果有,可以从原型管理器角色中取得这个对象引用;如果没有,客户端就需要自行复制此原型对象。
类图
简单形式
- 客户(Client):客户类提出创建对象的请求;
- 抽象原型(Prototype):这是一个抽象角色,通常是一个Java接口或者抽象类。此角色定义了的具体原型类所需的实现的方法。
- 具体原型(Concrete Prototype):此角色需要实现抽象原型角色要求的克隆相关的接口。