之前学习单例模式,现在回忆了一下,记录下关于单例模式的写法:
懒汉式:
- public class Singleton {
- /*
- * 单例模式:单个实例服务于整个应用
- * 懒汉式单例:只有在第一次请求实例的时候创建,并且只在第一次创建后,以后不再创建该类的实例
- */
- // 1.一个私有的指向自己的静态变量
- private static Singleton instance;
- // 2.私有的构造方法,保证不能从外部创建对象
- private Singleton(){}
- // 3.公开的静态工厂方法,返回该类的唯一实例(当发现没有实例没有初始化的时候才初始化)
- public static Singleton getInstance(){
- if(instance == null){
- instance = new Singleton();
- System.out.println("创建Singleton类的实例");
- }else {
- System.out.println("实例已经创建,不能再创建");
- }
- return instance;
- }
- }
- // 测试类
- class Test{
- public static void main(String[] args) {
- Singleton s = Singleton.getInstance();
- System.out.println(Singleton.getInstance());
- System.out.println(Singleton.getInstance());
- System.out.println(Singleton.getInstance());
- }
- }
饿汉式:
- public class Singleton2 {
- /*
- * 恶汉单例模式:在类加载的时候就创建一个单例模式.
- */
- // 1.私有的构造函数,确保不能在类的外部访问该类的构造函数
- private Singleton2(){
- System.out.println("构造函数执行了");
- }
- // 2.私有的唯一的静态实例变量,在类加载的时候就创建好单例对象
- private final static Singleton2 instance = new Singleton2();
- // 3.公开的静态工厂返回此类的唯一实例
- public static Singleton2 getInstance(){
- return instance;
- }
- }
- // 测试类
- class Test2{
- public static void main(String[] args) {
- Singleton2 s = Singleton2.getInstance();
- System.out.println(s);
- Singleton2 s2 = Singleton2.getInstance();
- System.out.println(s2);
- System.out.println(Singleton2.getInstance());
- System.out.println(Singleton2.getInstance());
- }
- }