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

 

注意:

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

 

posted on 2016-10-15 17:34  eaglezb  阅读(308)  评论(0编辑  收藏  举报

导航