创建模式

   

单例设计模式(Singleton Design Pattern)


构造函数需要是 private 访问权限的,这样才能避免外部通过 new 创建实例;考虑对象创建时的线程安全问题;考虑是否支持延迟加载;考虑 getInstance() 性能是否高(是否加锁)。


在类加载的时候,instance 静态实例就已经创建并初始化好了,所以,instance 实例的创建过程是线程安全的。不过,这样的实现方式不支持延迟加载(在真正用到 IdGenerator 的时候,再创建实例)


如果初始化耗时长,那我们最好不要等到真正要用它的时候,才去执行这个耗时长的初始化过程,这会影响到系统的性能(比如,在响应客户端接口请求的时候,做这个初始化操作,会导致此请求的响应时间变长,甚至超时)。采用饿汉式实现方式,将耗时的初始化操作,提前到程序启动的时候完成,这样就能避免在程序运行的时候,再去初始化导致的性能问题。


3. 双重检测


从业务概念上,有些数据在系统中只应该保存一份,就比较适合设计为单例类

 

原型模式


概念和使用场景:

有的对象创建成本比较大,特别是涉及到复杂计算,或者需要从rpc,网络,数据库,文件系统等慢速io中读取的时候。可以用原型模式,从其他已有对象中直接拷贝,而非每次创建新对象时,都重复执行这些耗时的操作。

 

应用:

有个服务器,有个很大的数据库缓存,定时更新,那么每次更新不用都从新从数据库获取;而只要从数据库获取,上次更新后的变化,所以可以利用原型模式,先生成原型,然后在merge差异。

如果这个缓存不大,用深拷贝简单;如果缓存大,那么用浅拷贝,修改的地方再用深拷贝。

 

深拷贝和浅拷贝:

浅拷贝仅仅拷贝索引;深拷贝还包括索引指向的内容;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值