java 單利模式設計原理,餓漢式懶漢式,開發中推薦餓漢式


單例模式的設計:

   1 //Single類進內存,對象還沒有存在,只有調用了getInstance方法時,才建立對象。

  

 1 //對象是方法被調用時,才初始化,也叫做對象的延時加載。成為:懶漢式。
 2 //Single類進內存,對象還沒有存在,只有調用了getInstance方法時,才建立對象。
 3 class Single
 4 {
 5     private static Single s = null;//創建對象
 6     private Single(){}//防止被其他類對該類進行實例化,避免被調用
 7     public static Single getInstance()
 8     {
 9         //A B
10         if(s==null)//如果A,B為空則進入
11         {
12             synchronized(Single.class)//A 進入后 此處功能是防止B進入,加入同步鎖 只允許一個實例進入
13             {                
14                 if(s==null)//A為null
15                 //對A進行實例化 再返回同步快12行,此時只有一個對象B,可以進入同步鎖,到14行此時對象不為空因為實例化了A ,直接返回S
16                     s = new Single();
17             }
18         }
19         return s;
20     }
21 }
22 
23 //記錄原則:定義單例,建議使用餓漢式。

 

 1 /*
 2 這個是先初始化對象。
 3 稱為:餓漢式。
 4 
 5 Single類一進內存,就已經創建好了對象。
 6 class Single
 7 {
 8     private static Single s = new Single();
 9     private Single(){}
10     public static Single getInstance()
11     {
12         return s;
13     }
14 }
15 */
16 
17 //對象是方法被調用時,才初始化,也叫做對象的延時加載。稱為:懶漢式。
18 //Single類進內存,對象還沒有存在,只有調用了getInstance方法時,才建立對象。
19 class Single
20 {
21     private static Single s = null;
22     private Single(){}
23     public static Single getInstance()
24     {
25         if(s==null)
26         {
27             synchronized(Single.class)
28             {                
29                 if(s==null)
30                     s = new Single();
31             }
32         }
33         return s;
34     }
35 }
36 
37 //記錄原則:定義單例,建議使用餓漢式。
38 
39 class  
40 {
41     public static void main(String[] args) 
42     {
43         System.out.println("Hello World!");
44     }
45 }

 

  餓漢式

 

 1 /*
 2 設計模式:解決某一類問題最行之有效的方法。
 3 java中23種設計模式:
 4 單例設計模式:解決一個類在內存只存在一個對象。
 5 
 6 
 7 想要保證對象唯一。
 8 1,為了避免其他程序過多建立該類對象。先禁止其他程序建立該類對象
 9 2,還為了讓其他程序可以訪問到該類對象,只好在本類中,自定義一個對象。
10 3,為了方便其他程序對自定義對象的訪問,可以對外提供一些訪問方式。
11 
12 這三部怎么用代碼體現呢?
13 1,將構造函數私有化。
14 2,在類中創建一個本類對象。
15 3,提供一個方法可以獲取到該對象。
16 
17 
18 
19 對於事物該怎么描述,還怎么描述。
20 當需要將該事物的對象保證在內存中唯一時,就將以上的三步加上即可。
21 
22 
23 */
24 
25 class Single
26 {
27 
28 
29     private  Single(){}
30 
31     private static Single s = new Single();
32 
33     public static  Single getInstance()
34     {
35         return s;
36     }
37 }
38 
39 
40 class SingleDemo 
41 {
42     public static void main(String[] args) 
43     {
44         Single s1 = Single.getInstance();
45         Single s2 = Single.getInstance();
46 
47         s1.setNum(23);
48 
49         System.out.println(s2.getNum());
50 
51 
52         
53 //        Single s1 = new Single();
54 //        Single s2= new Single();
55 //        s1.setNum(30);
56 //        System.out.println(s2.getNum());
57 
58 //        Student s1 = new Student();
59 //        s1.setAge(30);
60 //
61 //        Student s2 = new Student();
62 //        s2.setAge(12);
63 
64         Student s1 = Student.getStudent();
65         Student s2 = Student.getStudent();
66 
67         
68 
69 
70     }
71 }
72 
73 
74 
75 class Student
76 {
77     private int age;
78 
79 
80     private static Student s = new Student();
81     private Student(){}
82     public static Student getStudent()
83     {
84         return s;
85     }
86 
87 
88 
89     public void setAge(int age)
90     {
91         this.age = age;
92     }
93     public int getAge()
94     {
95         return age;
96     }
97 }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM