从开源框架理解设计模式系列#Protoype原型模式

原型模式是一种创建型设计模式,通过复制现有对象来创建新对象,减少了类的实例化过程。本文介绍了原型模式的定义、应用场景、实现方式,并以Spring框架中的原型模式为例进行详细讲解,同时探讨了其优缺点。
摘要由CSDN通过智能技术生成

目录

what什么是原型模式

why为什么需要原型模式

how怎么实现原形模式

开源框架经典案例

Spring中原型模式的使用

优缺点对比

优点

缺点

参考资料


what什么是原型模式

GOF定义: 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

Head_First定义:当创建给定类的事例的过程很昂贵或很复杂时,就使用原型模式。

定义:用一个已经创建的实例作为原型,通过复制该原型对象来创建一个和原型相同或相似的新对象。在这里,原型实例指定了要创建的对象的种类。用这种方式创建对象非常高效,根本无须知道对象创建的细节。

why为什么需要原型模式

        这个模式因为比较简单,很多文章都几乎没有介绍,Head_First和设计模式之禅里面也是简单介绍,甚至我们在工作中都可能没感觉,因为在很多人脑海中,原型用的场景少之又少,同时因为java自带的clone方法在实际工作中也不常用,加上在很多教材或者长辈会告诉我们,少用clone,clone很危险,在Effective java第三版这本书中也提到,必要时进行保护性clone,深拷贝浅拷贝的使用不当的例子也很多。

那什么时候需要原型模式呢,总结一下。

  •  当一个系统应该独立于它的产品创建、构成和表示时,要使用Prototype;
  • 以及当要实例化的类是在运行时刻指定时,例如,通过动态装载;
  • 为了避免创建一个与产品类层次平行的工厂类层次时;
  • 当一个类的实例只能有几个不同状态组合中的一种时。建立相应数目的原型并克隆它们可能比每次用合适的状态手工实例化该类更方便一些。
  • 对象之间相同或相似,即只是个别的几个属性不同的时候。
  • 创建对象成本较大,例如初始化时间长,占用CPU太多,或者占用网络资源太多等,需要优化资源。
  • 创建一个对象需要繁琐的数据准备或访问权限等,需要提高性能或者提高安全性。
  • 系统中大量使用该类对象,且各个调用者都需要给它的属性重新赋值。

how怎么实现原形模式

原型模式包含以下主要角色。

  1. 抽象原型类:规定了具体原型对象必须实现的接口。
  2. 具体原型类:实现抽象原型类的 clone() 方法,它是可被复制的对象。
  3. 访问类:使用具体原型类中的 clone() 方法来复制新的对象。

原型模式的结构图

开源框架经典案例

Spring中原型模式的使用

在 Spring中,原型模式应用的非常广泛,例如 scope='prototype'等都是原型模式的具体应用。

protected <T> T doGetBean(
			final String name, final Class<T> requiredType, final Object[] args, boolean typeCheckOnly)
			throws BeansException {

		final String beanName 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值