码迷,mamicode.com
首页 > 其他好文 > 详细

单例设计模式

时间:2014-10-15 03:09:14      阅读:282      评论:0      收藏:0      [点我收藏+]

标签:style   blog   color   ar   strong   sp   div   on   log   

单例设计模式:一个类有且仅有一个实例,并且自行实例化向整个系统提供

要点
    一是某个类只能有一个实例——私有的构造方法;
    二是它必须自行创建这个实例——指向自己实例的私有静态引用;
    三是它必须自行向整个系统提供这个实例。——以自己实例为返回值的静态的公有的方法
单例模式根据实例化对象时机的不同分为两种:一种是饿汉式单例,一种是懒汉式单例。饿汉式单例在单例类被加载时,就实例化一个对象交给自己的引用;而懒汉式在调用取得实例方法的时候才去实例化对象。代码如下:

饿汉式

1 public class Singleton {
2     private static Singleton singleton = new Singleton();
3     private Singleton(){}
4     public static Singleton getInstance() {
5         return singleton;
6 }


懒汉式

 1 public class Singleton {
 2     private static Singleton singleton;
 3     private Singleton() {}
 4     
 5     public static synchronized Singleton getInstance() {
 6         if (singleton == null) {
 7             singleton = new Singleton;
 8         }
 9         return singleton;
10     }
11 }


第三种格式

1 class Singleton {
2     private Singleton() {}
3     public static final Singleton singleton = new Singleton();
4 }

 

优点
    在内存中只有一个对象,节省内存空间;
    避免频繁的创建和销毁对象
    可以在系统设置全局的访问点,优化和共享资源的访问,确保所有对象都访问唯一实例。
    
应用实例

 1 class Singleton {
 2     private int num = 10;
 3     private static Singleton singleton = new Singleton();
 4     private Singleton() {}
 5     
 6     public static Singleton getInstance() {
 7         return singleton;
 8     }
 9     public void setNum(int num) {
10         this.num = num;
11     }
12     public int getNum() {
13         return this.num;
14     }
15 }
16 
17 class SingletonDemo {
18     public static void main(String[] args) {
19         Singleton s = Singleton.getInstance();
20         Singleton s1 = Singleton.getInstance();
21         s.setNum(10);
22         System.out.println(s.getNum());
23         System.out.println(s1.getNum());
24     }
25 }

 

单例设计模式

标签:style   blog   color   ar   strong   sp   div   on   log   

原文地址:http://www.cnblogs.com/xzgc/p/4025511.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!