首先,提前祝大家中秋快乐!公司今天下午能提前下班,闲着无事,上网找点单例模式的文档,但是并不是太多,就搜了篇英文的,感觉不错,就花了一个多小时把它翻译了一下。有需要的同学可以看一看。 :~) wangjun 2010-9-21 因为翻译是临时起意,准备不足,所以可能翻译的并不好,大家见谅。 原文地址:http://numbergrinder.com/node/29 Objective-C 设计模式:Singleton Pattern 当迁移到一种新的编程语言时,需要面临的问题之一就是怎样设计对应于该语言的设计模式。大部分情况语言为设计模式提供了易于实现的内建支持,或者干脆拥有直接实现了这种设计模式。 举例来说,在Python中,实现Command Dispatch模式和Singleton模式几乎时完全不必要的,你只需要在创建的模块(module)顶部插入"""This module implements the singleton pattern"""就万事大吉啦!实质上这就是一个Singleton。 省事吧:~) 但是换成Objective-c就不一样了:~(。下面我(指作者:David)就开始讲解如何在Objective-c中实现在我日常iphone开发中需要用到的设计模式。 在这些设计模式中,我发现自己最需要用到的是Singleton模式。在程序中,我需要一系列的对象,他们每一个内部都包含有一组变量和功能,是静态的,而且整个程序都只需要拥有一个该类的对象。 例如: 1.控制程序执行的命令器 2.管理数据库 3.音效控制 4.文件处理 还有很多很多… 简单来讲,我的众多游戏引擎之间需要去共享一系列的变量和功能,但是我并不想实例化多个对象。 在做了一些搜索后,我创建了下面的singleton模式: 1. @implementation Singleton 2. 3. + (Singleton *)instance { 4. static Singleton *instance; 5. 6. @synchronized(self) { 7. if(!instance) { 8. instance = [[Singleton alloc] init]; 9. 10. 11. } 12. } 13. 14. return instance; 15. } 16. 17. @end 这个单例可以用[Singleton instance]得到. 一次查阅下面的步骤: 第四行: 声明了静态变量,如果你有JAVA编程背景的话,这里或许会让你有点疑惑,在C(C++ 和 Objective-C)中,一个静态局部变量作用域存在于函数内,但是生命周期是整个程序,在下一次该函数调用时仍可使用。(和java中的类静态变量被该类各个实例变量共有的特点相似)。 译者注:关于静态变量有疑问的同学请猛击这里:http://baike.baidu.com/view/675642.htm 第六行: 我们想使用线程保护,这样同时的两个[Singleton instance]调用不会产生两个独立的对象实例。即使在一个单线程程序中,这种Synchronization不会有大的执行时间开销,而且这为以后开发打下了好的基础。 第七行: 检查是否该类对象实例已经初始化。我们是否需要生成该类的实例。 十四行: 返回创建的/已存在的对象实例。
|
Objective C 中实现单例模式
最新推荐文章于 2024-10-16 17:27:55 发布