跟JBPM学设计模式之原型模式
跟JBPM学设计模式之原型模式
模式简介
原型模式,用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。原型模式其实就是从一个对象创建另外一个可以定制的对象,而且客户是不需要知道任何创建的细节的。原型模式给每一个产品类配备一个克隆方法(大多的时候只需要给产品等级结构的顶级类配备一个克隆方法即可),这样,一个使用了原型模式的系统与他的产品对象时怎么创建出来的,以及这些产品对象的结构式怎样的,以及这个结构是否会发生变化就没有关系了。原型模式的结构图如下
图 1. 原型设计模式结构图
原型模式中涉及到了三种角色,分别是客户角色、抽象原型角色、具体原型角色。
客户角色:客户提出创建对象的需求;
抽象原型角色:提供所有具体原型类的克隆接口;
具体原型角色:被复制的对象,此角色需要实现抽象的原型角色所要求的接口。
原型模式中的对象复制
原型模式对对象的克隆会涉及到对象的复制,由于对象封装了数据和操作,所以就会涉及到数据的复制,这是也就有了深复制和浅复制的区分。
浅复制,只会复制所有数据成员的值,换言之,其只会复制值类型成员,对于引用类型仍然保留原来的引用,并不会对其进行复制。
深复制,就是要实现所有的值类型成员都要含有与原来相同的值,所有引用类型的成员要指向具有相等值的不同的对象。换言之,就是其要对所有的成员进行复制一遍。深复制要深入到多少层,是一个不易确定的问题。在决定以深复制的方式复制一个对象的时候,必须决定对引用类型成员是采取浅复制还是深复制。因此,在采取深复制的时候,需要决定复制的深度,此外复制的过程中,很可能会出现循环引用的问题,必须小心处理。
JBPM中的原型模式
原型模式是一个相对比较简单的模式,JBPM中对unix-like cron expression的解析和计算求值,使用了原型模式,其结构如下图所示
图 2. JBPM中的原型模式
抽象原型角色:java中的ICloneable接口充当了此角色,提供了原型模式需要的克隆接口clone.
具体原型角色:CronExpression实现了clone方法。
原型模式的特点
1. 原型模型模式允许动态地增减或减少产品类。由于常见产品类实例的方法是产品类
内部具有的,因此,增加新产品对整个结构没有影响。
2. 原型模式提供简化的创建结构。工厂方法模式等常常需要有一个与产品等级结构相同的结构,而原型模式则不需要。
3. 产品类不需要有任何事先确定的等级结构,因为原型模式适用于任何的等级结构。
4. 原始类型模式最主要的缺点是每一个类都需要一个克隆方法,这需要对类的功能进行通判考虑,这对于全新的类来说不是很难的,但是对于已经有的类不一定很容易,
特别是当一个类含有循环结构的时候。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:基于图像分类模型对图像进行分类
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2011-06-09 JBPM与企业架构模式之单例模式
2011-06-09 线程同步之lock学习