目录
单例模式
本质:控制实例数目
保证一个类仅有一个实例,并提供一个访问它的全局访问点(private static instance)。
- 一个私有构造函数,确保用户无法通过new直接实例它。
- 一个静态私有成员变量instance
- 一个静态公有方法GetInstance。负责检验并实例化自己,然后存储在instance中,以确保只有一个实例被创建。
特点
- 单例类只能有一个实例。
- 单例类必须自己创建自己的唯一实例。
- 单例类必须给所有其它对象提供这一实例。
分类
懒汉式单例模式(时间换空间)
有需要的时候再创建一个实例
public class Singleton {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance() {
if(instance==null)
instance=new Singleton();
return instance;
}
}
饿汉式单例模式(空间换时间)
不管三七二十一先创建一个实例
public class Singleton {
private static Singleton instance=new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
适用场景
要求一个类只有一个实例时
推而广之,一个类要求只有N个实例时,可以变为N例模式,即有N个private static instance
实例——读取配置文件
eclipse配置properties文件:src---->new----->file
str1=aaa
str2=bbb
package com.read;
import java.util.ResourceBundle;
//单例类
public class Config {
private static Config instance;
private String str1;
private String str2;
private Config() {
readConfig();
}
public static Config getInstance() {
if(instance==null)
return new Config();
return instance;
}
private void readConfig() {
//绑定资源配置文件
ResourceBundle bundle=ResourceBundle.getBundle("config");
str1=bundle.getString("str1");
str2=bundle.getString("str2");
}
public String getStr1() {
return str1;
}
public void setStr1(String str1) {
this.str1 = str1;
}
public String getStr2() {
return str2;
}
public void setStr2(String str2) {
this.str2 = str2;
}
}
package com.read;
public class Main {
public static void main(String[] args) {
Config c1=Config.getInstance();
Config c2=Config.getInstance();
if(c1==c2)
System.out.println("只有一个实例");
System.out.println(c1.getStr1()+","+c1.getStr2());
}
}