单例模式(未完成)

来源:互联网 发布:阿里云io域名 编辑:程序博客网 时间:2024/06/06 00:41
一)故事

二)定义
确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

三)代码例子
共计两个类组成:1)普通类;2)单例类;
1)普通类
/** *  普通类 *  * @author levovo */public class A {    public A() {        System.out.println("A()->A()");    }    public void method1() {        System.out.println("A()->method2()");    }    public void method2() {        System.out.println("A()->method2()");    }}

2)单例类
单例模式(通过synchronized实现单例)
/** *  单例模式(通过synchronized实现单例) *   * @author levovo * */public class ASingle {    // 单例模式对象    private static A mInstance = null;    // 要加这个,修饰为private    private ASingle() {            }    /**     * 得到单例实例     *     * @return     */    public synchronized static A getInstance() {        if (mInstance == null) {            mInstance = new A();        }        return mInstance;    }}

单例模式(通过Object对象锁实现单例)
/** *  单例模式(通过Object对象锁实现单例) * * @author levovo * */public class BSingle {    // 对象锁    private static Object mObject = new Object();    // 单例模式对象    private static A mInstance = null;    // 要加这个,修饰为private    private BSingle() {            }    /**     * 单例模式     *     * @return     */    public static A getInstance() {        synchronized (mObject) {            if (mInstance == null) {                mInstance = new A();            }        }        return mInstance;    }}

场景使用例子
/** *  场景使用例子 * * @author levovo */public class Client {    public static void main(String[] args) {        // 单例模式(通过synchronized实现单例)        ASingle.getInstance().method1();        ASingle.getInstance().method2();        // 单例模式(通过Object对象锁实现单例)        BSingle.getInstance().method1();        BSingle.getInstance().method2();    }}

四)优点(未完成)
1)由于单例模式在内存中只有一个实例,减少了内存开支,特别是一个对象需要频繁地创建,销毁时,而且创建或销毁时性能又无法优化,单例模式的优势就非常明显了。
2)由于单例模式只生成一个实例,所以减少了系统的性能开销,当一个对象的产生需要比较多的资源时,如读取配置、产生其他依赖对象时,则可以通过在应用启动时直接产生一个单例对象,然后用永久驻留内存的方式来解决。
3)
4)

五)缺点(未完成)
1)
2)
3)

六)使用场景(未完成)
1)
2)
3)
4)

七)注意事项

八)扩展(未完成)
多例模式

九)总结