您的位置:首页 > 其它

简单几个例子,教你用单例模式

2014-11-10 07:34 225 查看
程序员路上如果过多的停留在基础代码上,是对于自己的一种恶心,有时候我们要学会偷懒、 还记得我在写天气APP教程的时候。使用过得一个设计模式,但是只是觉得大家应该都知道也就没做过多的总结。单例模式:简单理解:此类使用单例,全局都可调用此类官方解释:单例模式确保一个类,只有一个实例,自行提供实例并向整个系统提供这个实例、 特点 :1.一个类只能有一个实例 2.自己创建这个实例 3.整个系统都要使用这个实例拿几个例子解释吧:windows里面的 回收站 整个系统都使用这个唯一的实例,而且回收站自定提供自己的实例。再拿我写的天气APP用到的单例模式,首先weatherDB,作为一个工具类,又是查询天气的,肯定要经常用到,根据设计原则,尽量减少new 出空间,减少内存空间的消耗,所以我也使用单例模式来解决,自己实例,全局可以调用。看看 我写的这个单例模式吧public
synchronized
static coolWeather getinstance(Context context){if(cooWeatherDb=null){cooWeatherDb=new CollweatherDb(context);}return cooWeatherDb;}
回到正题:
单例有两种经常用:
1,饿汉式单例类
public
class
Singleton {


private
Singleton(){}


//在自己内部定义自己一个实例,是不是很奇怪?

//注意这是private 只供内部调用


private
static
Singleton instance =
new

Singleton();


//这里提供了一个供外部访问本class的静态方法,可以直接访问

public
static
Singleton getInstance() {
return
instance;

}

}
2,懒汉式单例类
public
class
Singleton {


private
static
Singleton instance =null; 

public
static
synchronizedSingleton getInstance() {


//这个方法比上面有所改进,不用每次都进行生成对象,只是第一次

//使用时生成实例,提高了效率!

if
(instance==null)

instance=
new
Singleton();

return
instance;  }


}
第二中形式是lazy initialization,也就是说第一次调用时初始Singleton,以后就不用再生成了。注意到lazy initialization形式中的synchronized,这个synchronized很重要,如果没有synchronized,那么使用getInstance()是有可能得到多个Singleton实例。一般来说第一种比较安全再看看我在彩票APP中用到的单例模式 PS:只截取一部分代码public class TitleManager { // 显示和隐藏 private static TitleManager instance = new TitleManager(); private TitleManager() { } public static TitleManager getInstance() { return instance; }因为titleManager 在APP中要大量使用所以,将其全局化可以调用 也就是单例 我用的是饿汉单例形式调用的时候 直接 方法名.getinstance 即可 TitleManager manager = TitleManager.getInstance();博主 将在后面使用到单例模式 会继续更新这篇文章,让大家知道单例 应该啥时候用,虽然我已经说的比较应用场合了
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: