设计模式分类比较多,这里先学习单例模式
单例模式:在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。分为饿汉式、赖汉式等
我们上下代码:
1 package com.learn.chap03.sec18; 2 3 public class Singleton1 { 4 5 /** 6 * 构造方法私有 7 */ 8 private Singleton1(){ 9 10 } 11 12 /** 13 * 饿汉式单例实现 14 */ 15 private static final Singleton1 single1 = new Singleton1(); 16 17 /** 18 * 静态工厂方式 19 */ 20 public static Singleton1 getInstance(){ 21 return single1; 22 } 23 24 }
1 package com.learn.chap03.sec18; 2 3 public class Singleton2 { 4 /** 5 * 构造方法私有 6 */ 7 private Singleton2(){ 8 9 } 10 11 /** 12 * 赖汉式单例实现 在第一次调用的时候实例化 13 */ 14 private static Singleton2 single; 15 16 /** 17 * 工厂 18 */ 19 public synchronized static Singleton2 getInstance(){ 20 if(single==null){ 21 // 第一次调用的时候实例化 22 System.out.println("第一次调用的时候实例化"); 23 single = new Singleton2(); 24 25 } 26 return single; 27 } 28 }
1 package com.learn.chap03.sec18; 2 3 public class TestSingleton { 4 5 public static void main(String[] args) { 6 Singleton1 singleton1 = Singleton1.getInstance(); 7 Singleton1 singleton2 = Singleton1.getInstance(); 8 System.out.println("饿汉式:"+(singleton1 == singleton2)); 9 10 TestSingleton t1 = new TestSingleton(); 11 TestSingleton t2 = new TestSingleton(); 12 System.out.println((t1 == t2)); 13 14 Singleton2 singleton3 = Singleton2.getInstance(); 15 Singleton2 singleton4 = Singleton2.getInstance(); 16 System.out.println("懒汉式:"+(singleton3 == singleton4)); 17 18 } 19 20 }
运行结果
饿汉式:true
false
第一次调用的时候实例化
懒汉式:true
注意:
饿汉式与懒汉式的区别是:饿汉式在初始化单例对象时,就已经实例化了,而懒汉式只有在第一次调用工厂初始化方法的时候才实例化,以后不再进行实例化
时间: 2024-10-07 05:27:05