Java设计模式之单例设计模式 入门实例

一、基础概念

  (1).单例设计模式:保证一个类在内存中的对象唯一性。

  (2).应用场景:数据都存储在配置文件的对象中,多个程序对同一个配置文件的对象进行操作。一个程序要基于另一个程序操作后的结果进行操作。

  (3)步骤:

    1.构造函数私有化

    2.自己new创建一个本类对象。

    3.对外提供一个方法,让其他程序可以获取到这个对象。

  (4)饿汉式:代码以上来就创建一个本类对象。

      懒汉式:有数据传入时,才会创建一个本类对象。

二、饿汉式(非延迟加载形式)

  (1).示例代码

 1 class Single
 2 {    
 3     //构造函数私有化
 4     private Single(){}
 5     //一上来就创建一个本类对象
 6     static Single s = new Single();
 7     
 8     ////对外提供一个方法getInstance,让其他程序可以获取到这个对象。
 9     public static Single getInstance()
10     {
11         return s;
12     }
13     
14 }
15 class SingleDemo
16 {
17     public static void main(String[] args)
18     {
19         
20         Single s1 = Single.getInstance(); //调用对象而不直接调用值,是为了可控。
21         Single s2 = Single.getInstance();
22         System.out.println(s1==s2);    
23     }
24 }

  (2).代码运行

  

三、懒汉式(延迟加载形式)

  (1).示例代码

 1 class Single
 2 {
 3     //有数据传入时,才会去创建本类对象。
 4     private static Single s = null;
 5     private Single(){}
 6 
 7     public static Single getInstance()//提供接口,获取实例
 8     {
 9         if(s==null)
10             s = new Single();
11         return s;
12     }
13 }
14 class SingleDemo
15 {
16     public static void main(String[] args)
17     {
18         
19         Single s1 = Single.getInstance(); //调用对象而不直接调用值,是为了可控。
20         Single s2 = Single.getInstance();
21         System.out.println(s1==s2);
22     }
23 }

(2).代码运行

  

 四、实例代码

  p的名字是王小红,外界p1、p2都可以访问和修改p的名字。当p2修改p的名字为小红后,p1、p2访问p的名字都为小红。

 1 class Person
 2 {
 3     //构造函数私有化
 4     private String name;
 5     private Person(String name)
 6     {
 7         this.name = name;    
 8     }    
 9     //创建一个本类对象,p的名字为wangxiaohong
10     private static Person p = new Person("wangxiaohong");
11     
12     //对外提供一个方法getInstance,让其他程序可以获取到这个对象。
13     public static Person getInstance()
14     {
15         return p;
16     }
17     
18     public void setName (String name)
19     {
20         this.name = name;
21     }
22     
23     public String getName()
24     {
25         return this.name;
26     }
27     public void sleep()
28     {
29         System.out.println(name+".....sleep.....");
30     }
31     
32 }
33 class SingleDemo2 
34 {
35     public static void main(String[] args) 
36     {
37         Person p1 = Person.getInstance();
38         Person p2 = Person.getInstance();
39         p2.setName("xiaohong");//p的名字修改为xiaohong
40         
41         //p1和p2都是同一个对象p。
42         p1.sleep();
43         p2.sleep();
44     }
45 }

五、代码运行

  

 

posted @ 2018-04-17 22:12  竹小冉  阅读(261)  评论(0编辑  收藏  举报