首页 > 代码库 > java之设计模式

java之设计模式

设计模式分类比较多,这里先学习单例模式

单例模式:在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

 

注意:

饿汉式与懒汉式的区别是:饿汉式在初始化单例对象时,就已经实例化了,而懒汉式只有在第一次调用工厂初始化方法的时候才实例化,以后不再进行实例化

 

java之设计模式