作为设计模式中最简单的一个,单例模式还是在很多系统中都会用到,总有那么一些实例,从始至终只需要它的一个实例,而且任何时候都要总方便的得到,像 Application 对象啦,环境对像啊。
要保持你设计的类别人只会初始出一个实例来,像 Java/C++/C# 中的做法一般希望能保证以下那些:
1. 构造方法藏起来,private 修饰,这样只能通过统一的工厂方法获得实例,因为 new 出来的总是新对象
2. 克隆方法出来的对象仍然是原来的对象
3. 反序列化出的对象也仍然是原来那个唯一的对象(这好像有点难)
4. 一般程序运行期间,该单实例不被释放
5. 一般要求工厂方法是原子性的,也是避免返回了不同的实例
6. 等等................. 是否还有些补充?
不一定每一点都真正考虑到,因为不是每个使用都都那么变态或不存在某些使用场景。
而我们这里的 Objective-C 有其语言的较大特殊性,是通过 alloc 来创建实例的,无法把构造方法 alloc 隐藏起来,但我们总是有办法的,可以做到:
1. 工厂方法返回唯一的实例
2. 多次调用 alloc 构造出的实例与 工厂方法得到的是同一个
3. 让你释放不掉这个实例,引用计数不让归零 阅读全文 >>