• 单例类


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

      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()的实现方式。

       

  • 相关阅读:
    解决<c:if>无else的问题
    极限挑战----3小时完成OA系统(失败)
    jstl的if标签和forEach标签的解析
    EL表达式
    JSP静态包含和动态包含的区别
    JSP九大隐式对象和四大域对象-----面试
    mybatis学习01--基础认识
    怎样将本地的代码上传到github
    随机数的生成,静态导入,可变参数的方法,方法重载,浮点数的比较
    zookeeper学习2
  • 原文地址:https://www.cnblogs.com/taray/p/5336184.html
Copyright © 2020-2023  润新知