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

  程序员路上如果过多的停留在基础代码上,是对于自己的一种恶心,有时候我们要学会偷懒、 还记得我在写天气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 synchronized Singleton 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();

博主 将在后面使用到单例模式 会继续更新这篇文章,让大家知道单例 应该啥时候用,虽然我已经说的比较应用场合了


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值