单例模式实际应用

项目中须要在程序启动时,将数据加载到内存中,因此要使用静态或者单例模式。
如何选择?
 为何使用单例模式而不用静态方法?

从面相对象的角度讲:
  虽然都能实现目的,可是他们一个是基于对象,一个是面向对象的,就像咱们不面相对象也能解决问题同样,面相对象的代码提供一个更好的编程思想。
若是一个方法和他所在类的实例对象无关,那么它就应该是静态的,反之他就应该是非静态的。若是咱们确实应该使用非静态的方法,可是在建立类时又确实只须要维护一份实例时,就须要用单例模式了。
好比说咱们在系统运行时候,就须要加载一些配置和属性,这些配置和属性是必定存在了,又是公共的,同时须要在整个生命周期中都存在,因此只须要一份就行,这个时候若是须要我再须要的时候new一个,再给他分配值,显然是浪费内存而且再赋值没什么意义,因此这个时候咱们就须要单例模式或静态方法去维持一份且仅这一份拷贝,但此时这些配置和属性又是经过面向对象的编码方式获得的,咱们就应该使用单例模式,或者不是面向对象的,但他自己的属性应该是面对对象的,咱们使用静态方法虽然能一样解决问题,可是最好的解决方案也应该是使用单例模式。
从功能上讲:
  单例模式能够控制单例数量;能够进行有意义的派生;对实例的建立有更自由的控制;[转自http://www.cnblogs.com/seesea125/archive/2012/04/05/2433463.html为何要使用单例模式]

整体来讲就是,单例模式和静态方法均可以解决这个问题,处于面向对象考虑,优先选择单例模式。

一、spring启动时加载
public class UserConfigListener extends ContextLoaderListener {

    protected final Log logger = LogFactory.getLog(getClass());

    public void contextInitialized(ServletContextEvent event) {
        try {
            Config.getInstance().init();
        } catch (Exception e) {
            logger.error("初始化信息错误:", e);
        }
    }
    
}
二、单例模式
public class Config {
    private static Config instance = new rConfig();
    private Map<String, String> info = new HashMap<String, String>();

    // 得到惟一实例
    public static Config getInstance() {
        return instance;
    }

    // 控制惟一实例
    private Config() {
    }

    public void init() throws Exception {
        info.put("aa","bb");
    }

    public Map<String, String> getUInfo() {
        return info;
    }

}
之前只是字面上知道单例模式,并无实际用过,只是知道得到惟一实例,可是不清楚如何在这个实例中进行其余的操做。如今终于明白了,o(∩_∩)o 哈哈
相关文章
相关标签/搜索