单例模式,最大使用,最大范围,什么,你的项目没用?功能主治:大量减小new运算,降低性能开销。
单例模式 Singleton
问题:
Application needs one, and only one, instance of an object. Additionally, lazy initialization and global access are necessary.
意图:
- Separate the construction of a complex object from its representation so that the same construction process can create different representations.
 - Parse a complex representation, create one of several targets
 
代码
例1:实现1
package com.xdnote.DesignPattern.creational.signleton;
public class Singleton {
    /**
     * 私有构造器,防止被NEW
     * */
    private Singleton() {
        System.out.println("Build a Object");
    }
    public static Singleton obj = null;
    public static Singleton getInterface(){
        if(obj==null){
            obj = new Singleton();
        }
        return obj;
    }
    public void method(){
        System.out.println("Run Method");
    }
}
代码2:另一种实现
package com.xdnote.DesignPattern.creational.signleton;
public class Singleton2 {
    private Singleton2() {
        System.out.println("Build a Object");
    }
    private static class Provider {
        private static final Singleton2 obj =new Singleton2();
    }
    public static Singleton2 getInterface(){
        return Provider.obj;
    }
    public void method(){
        System.out.println("Run Method");
    }
}
代码3:客户端调用
package com.xdnote.DesignPattern.creational.signleton;
public class Client {
    /**
     * 超级简单的单例模式,这个也不用多说了,大家入门时都用过单例+工厂做过东西吧,这里提供了两种方法
     * @param args
     * 做用就不说了,看打出来的日志就知道,如果有多个地方需要一个对象时,可以减少new带来的性能损失
     */
    public static void main(String[] args) {
        //第一种是用常用的内部状态变量实现
        Singleton obj1 = Singleton.getInterface();
        obj1.method();
        Singleton obj2 = Singleton.getInterface();
        obj2.method();
        Singleton obj3 = Singleton.getInterface();
        obj3.method();
        //另一种用个内部静态类
        Singleton2 obj4 = Singleton2.getInterface();
        obj4.method();
        Singleton2 obj5 = Singleton2.getInterface();
        obj5.method();
        Singleton2 obj6 = Singleton2.getInterface();
        obj6.method();
    }
}
小结
单例模式 Singleton
- 使用频率:
极高 
实在太多了,即可以单独使用,也可以配合在工厂或其它模式里面组合使用。可以说是只要程序中的一个对象不需要经常new或可以new之后就视为常量来使用时,就必须使用单例。
- 利弊影响:
极低 
利:极度简单、省性能,只要在把new改为getInstance即可。
弊:比较小的情况下会出现数据异常,一般情况下比较好定位,但有些还是不好定位比如servlet.另外,菜鸟如果什么都用想着单例的话,可能会撑死内存。
- 小评:
简单实用,必备常识