zoukankan      html  css  js  c++  java
  • 单例类

      单例类是指仅有一个实例的类,在系统中具有唯一性的组件可作为单例类,这种类的实例通常会占用较多的内存,或者实例的初始化过程比较冗长,因此随意创建会影响系统性能。

      Struct框架的ActionServlet类和Hibernate的SessionFactory和Configuration类也是单例类:

    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Properties;
    
    public class GloabalConfig {
        private static final GloabalConfig INSTANCE=new GloabalConfig();
        private Properties properties=new Properties();
        private GloabalConfig(){
            try {
                //加载配置信息
                //InputStream in=getClass().getResourceAsStream("myapp.properties");
                //读取文件要使用类加载器[因为类加载器读取资源的时候,默认的主目录是src目录]
                InputStream in=GloabalConfig.class.getClassLoader().getResourceAsStream("myapp.properties");
                properties.load(in);
                in.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        public static GloabalConfig getInstance(){ //静态工厂方法
            return INSTANCE;
        }
        public Properties getProperties(){
            return properties;
        }
        public static void main(String[] args) {
            String name=GloabalConfig.getInstance().getProperties().getProperty("name");
            System.out.println(name);
        }
    }

     以上GloabalConfig类就是单例类,用于存放软件系统配置的信息。GloabalConfig类从配置文件中读取配置信息,并存放在properties属性中:

     实现单例类两种方式:

      (1)把构造方法定义为private类型,提供 public static final类型的静态变量,该变量引用类的唯一实例:

        public static final GloabalConfig INSTANCE=new GloabalConfig();

        (2)把构造方法定义为private类型,提供public static类型的静态工厂方法:如上

       这样更加灵活,可以修改静态工厂方法getInstance()的实现方式。

       

  • 相关阅读:
    29
    28
    27
    950. 按递增顺序显示卡牌
    25
    20190624
    409. 最长回文串
    636. 函数的独占时间
    LeetCode 1046. 最后一块石头的重量(1046. Last Stone Weight) 50
    LeetCode 942. 增减字符串匹配(DI String Match) 49
  • 原文地址:https://www.cnblogs.com/taray/p/5336184.html
Copyright © 2011-2022 走看看