欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

Java基础知识之java单例模式,

来源: javaer 分享于  点击 12156 次 点评:128

Java基础知识之java单例模式,


Java单例模式概念:

java中单例模式是一种常见的设计模式,单例模式分三种:懒汉模式单例、饿汉模式单例、登记模式的那里三种。

 

  单例模式有一下特点:

1、单例类只能有一个实例。

2、单例类必须自己自己创建自己的唯一实例。

3、单例类必须给所有其他对象提供这一实例。

单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

 

1.饿汉式单例类

                           

1//饿汉式单例类.在类初始化时,已经自行实例化

2  publicclass Singleton1 {

3      //私有的默认构造子

4      privateSingleton1() {}

5      //已经自行实例化

6      privatestaticfinal Singleton1 single = newSingleton1();

7      //静态工厂方法

8      publicstatic Singleton1 getInstance() {

9          returnsingle;

10      }

11  }

 

如果你想学习java可以来这个群,首先是二八零,中间是八二一,最后是七七九,里面有大量的学习资料可以下载。


2.懒汉式单例类

1//懒汉式单例类.在第一次调用的时候实例化

2  publicclass Singleton2 {

3      //私有的默认构造子

4      privateSingleton2() {}

5      //注意,这里没有final    

6      privatestatic Singleton2 single=null;

7      //静态工厂方法

8      publicsynchronized  static Singleton2 getInstance() {

9           if(single == null) {  

10              single = new Singleton2();

11          }  

12         return single;

13      }

14  }

 

 

3.登记式单例类

1import java.util.HashMap;

2  importjava.util.Map;

3  //登记式单例类.

4  //类似Spring里面的方法,将类名注册,下次从里面直接获取。

5  publicclass Singleton3 {

6      privatestatic Map map = new HashMap();

7      static{

8          Singleton3 single = new Singleton3();

9         map.put(single.getClass().getName(), single);

10      }

11      //保护的默认构造子

12      protected Singleton3(){}

13      //静态工厂方法,返还此类惟一的实例

14      publicstatic Singleton3 getInstance(String name) {

15         if(name == null) {

16             name = Singleton3.class.getName();

17             System.out.println("name ==null"+"--->name="+name);

18         }

19         if(map.get(name) == null) {

20             try {

21                  map.put(name, (Singleton3)Class.forName(name).newInstance());

22             } catch (InstantiationException e) {

23                  e.printStackTrace();

24             } catch (IllegalAccessException e) {

25                  e.printStackTrace();

26             } catch (ClassNotFoundException e) {

27                  e.printStackTrace();

28             }

29         }

30         return map.get(name);

31      }

32      //一个示意性的商业方法

33      public String about() {  

34         return "Hello, I am RegSingleton.";    

35     }    

36      publicstaticvoid main(String[] args) {

37         Singleton3 single3 = Singleton3.getInstance(null);

38         System.out.println(single3.about());

39      }

40  }

Java 学习交流,点击链接加入群【https://jq.qq.com/?_wv=1027&k=41M8cFE】学习


相关文章

    暂无相关文章
相关栏目:

用户点评