Singleton模式和Mono-State模式
来源:互联网 发布:网络推广是诈骗吗 编辑:程序博客网 时间:2024/06/05 07:09
Singleton模式和Mono-State模式
类和实例
- 对于大多数的类,都可以创建多个实例.在需要和不需要时,创建和删除这些实例.该过程会伴随着内存的分配和归还.
- 同时,有一些类,应该仅有一个实例.该实例在程序启动/结束时被创建和删除.
- root对象.通过该对象可以得到系统中的其他对象.
- factory对象.用来创建系统中的其他对象.
- manager对象.负责管理和控制其他对象.
- 对于这些对象,如果创建了多份,那么就会发生逻辑错误.
- 通常情况下,强制对象单一性的机制有些多余.完全可以在程序启动时只创建该对象的一个实例.
- 不过,使用模式能够传达我们的意图(该类仅能有一个实例).
- 代价/收益:如果强制对象单一性的机制是轻量级的.那么传达意图的收益会胜过实施这些机制的代价.
- Singleton模式
- 实现: private new(); private static theInstance; public static Instance();
- 收益:
- 适用于任何类:只需把类的构造变为private,并增加相应的static变量和方法.
- 可以透过派生创建.
- 延迟求值(lazy evaluation):只有真正使用时,才会创建对象.
- 代价:
- destory()未定义:由于持有Sigleton实例的模块很多,即使将该实例=null.随后对其方法的调用仍然会创建另一个新的实例.
- 不能继承:从Singleton类派生的类不是Singleton.而必须加入static的处理.
- 效率问题:每次调用Instance()都会进行if判断,很多情况下,是多余的.
- 不透明性:Singleton的使用者不知道其使用的是一个Singleton类.
- Mono-State模式
- 实现: 简单地把对象的所有变量变成static.而方法都是普通方法(非static).
- 所有的实例,看起来就像具有不同名称的同一对象一样.即使当前所有的实例都被销毁,也不会丢失Data.
- 收益:
- 透明性:Mono-State对象和regular对象在使用上没有区别.
- 可派生性:派生类也会共享相同的static var.
- 多态性: 方法是非静态的,不同的子类可以基于同样的static var拥有不同的表现.
- 代价:
- 不可转换型: 不能透过派生来把常规类转换为Mono-State类.
- 效率: Mono-State对象是真正的对象,创建许多个会有开销.
- 内存: 只要创建了,即使还未使用,就已经占用了内存.
- 对比:
- Singleton强制结构上的单一性.
- Mono-State强制行为上的单一性.
- Mono-State的测试case对Singleton是有效的.但是反之不行.
- 如果希望透过派生去约束一个现存类,并且不介意它的所有调用者都必须要调用instance()来获取访问权,使用Singleton.
- 如果希望类的单一性本质对调用者透明,或者使用单一对象的多态派生对象.使用Mono-State.
0 0
- Singleton模式和Mono-State模式
- FSM和STATE模式
- FSM和STATE模式
- SINGLETON 模式和MONOSTATE 模式
- Singleton模式和Monostate模式
- 职责连模式和state模式区别
- state模式
- State模式
- State模式
- state模式
- State模式
- State 模式
- State 模式
- state模式
- state模式
- State 模式
- State模式
- State模式
- TCP/IP相关知识点与面试(1)
- FreeMarker的缓存处理
- ble低功耗蓝牙介绍-1
- Vim常用命令及快捷键
- 《java编程思想》第十章:内部类
- Singleton模式和Mono-State模式
- 基于Google maps的定位 marker 路线规划 事件监听、响应等
- 获取一个从min到max的随机整数
- iOS下JS与原生OC互相调用(总结)
- TCP/IP相关知识点与面试(2)
- jffs2reset 实现分析
- 微信小程序开始内侧 APP市场可能遭受强烈冲击
- ApplicationContext 作用
- SQL Relay学习笔记(5)