【一】设计模式——单例模式(Singleton Pattern)

定义

单例模式(Singleton Pattern):

Ensure a class has only one instance, and provide a global point of access to it.
译:确保某个类只有一个实例对象,并且提供一个全局的访问入口

类图

单例UML
解读一下:
这个单例类的构造方法需要是私有的,并且有一个静态的内部实例对象,然后提供对外获取该类实例的静态方法getInstance()
访问时只需要Singleton.getInstance()就可以获得该类实例,并进行使用

优缺点及注意事项

1. 优点:

只有一个对象,减少内存的占用,特别创建对象和销毁对象比较耗时耗性能的情况下更加合适。
可以很方便的做到单线程的读写,比如写文件避免两个对象同时操作引发一些异常。
不会频繁的创建和销毁对象,减少JAVA频繁GC

2. 缺点:

不能很好的进行扩展,每次新加功能都需要修改原类。

3.注意事项:

在客户端开发时,需要注意单例类对Context的引用,避免引用而内存泄露。
注意单例类对象的创建时间,避免多线程访问引发空指针的问题

使用场景

IO访问、数据库访问、整个应用只需要一个统一的资源管理类、工具类等

实现方式

1.方式一

public class Singleton {
    private final static Singleton mSingleton = new Singleton();
    private Singleton() {
    }
    public static Singleton getInstance() {
        return mSingleton;
    }
}

2.方式二

public class Singleton {
    private static Singleton mSingleton = null;
    private Singleton() {
    }

    public static Singleton getInstance() {
        if (mSingleton == null) {
            synchronized (Singleton.class) {
                // 进入同步块仍需要判断是否已经new出对象来了
                if (mSingleton == null) {
                    mSingleton = new Singleton();
                }
            }
        }
        return mSingleton;
    }
}

3.方式三

public class Singleton {
    private Singleton() {
    }

    private static class Holder {
        private static final Singleton mSingleton = new Singleton();
    }

    public static Singleton getInstance() {
        return Holder.mSingleton;
    }
}

此方式也算是延迟初始化,但不用考虑多线程问题,类似第一种方式,在初始化类的时候,直接生成对象

原文地址:http://blog.csdn.net/yk3372/article/details/53352175

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值