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 }

 

posted @ 2016-05-31 17:20  全球顶尖骇客  阅读(2918)  评论(0编辑  收藏  举报