java单例模式(饿汉式和懒汉式)

 1 /*
 2  * 设计模式:对问题行之有效的解决方式。其实它是一种思想。
 3  * 
 4  * 1,单例设计模式
 5  *     解决的问题:就是可以保证一个类在内容中的对象唯一性。
 6  *     
 7  *     必须对于多个程序使用同一个配置信息对象时,就需要保证该对象的唯一性。
 8  *     
 9  *     如何保证对象唯一性呢?
10  *     1,不允许其他程序用new创建该类对象。
11  *     2,在该类创建一个本类实例。
12  *     3,对外提供一个方法让其他程序可以获取该对象。
13  *     
14  *     步骤:
15  *     1,私有化该类构造函数。
16  *     2,通过new在本类中创建一个本类对象。
17  *     3,定义一个公有的方法,将创建的对象返回。
18  */
19 //饿汉式 (开发)
20 class Single{//类一加载, 对象就已经存在了。
21      static Single s = new Single();
22     private Single() {}
23     public static Single getInstance() { //String name //给一个方法 可控
24         return s;
25     }
26 }
27 //懒汉式 存在一些问题:如果后期被多线程并发访问时可能保证不了对象唯一性,存在安全隐患。 (面试会问)
28 class Single2{//类加载进来,没有对象,只有调用了getInstance方法时,才会创建对象。
29              //延迟加载形式。
30     private static Single2 s = null;
31     
32     private Single2() {}
33     
34     public static Single2 getInstance() {
35         if(s == null) {
36             s = new Single2();
37         }
38         return s;    
39     }
40 }
41 public class SingleDemo {
42     public static void main(String[] args) {
43         Single ss = Single.getInstance();
44         Single s1 = Single.getInstance();
45         Single s2 = Single.getInstance();
46         System.out.println(s1 == s2);
47                 //Single ss = Single.s; //也可以但是不可控。
48         Test t1 = Test.getInstance();
49         Test t2 = Test.getInstance();
50         t1.setNum(10);
51         t2.setNum(20);
52         System.out.println(t1.getNum());
53         System.out.println(t2.getNum());
54     }
55 }
56 class Test{
57     private int num;
58     //保证唯一性加入下面三句;
59     private static Test t = new Test();
60     private Test() {}
61     public static Test getInstance() {
62         return t;
63     }
64     public void setNum(int num) {
65         this.num = num;
66     }
67     public int getNum() {
68         return num;
69     }
70     
71 }

 

posted @ 2021-09-26 16:11  doremi429  阅读(58)  评论(0编辑  收藏  举报