简单回顾下单例模式

  之前在面试的时候被问过单例模式的设计,没回答上,于是查阅了一些介绍单例模式的博客,下面简单的总结下。

  单例模式适用的场景:假如你创建了一个类,同时你希望这个类只有一个实例,不会被外部类new多次,这个时候你就可以考虑使用单例模式了。

  单例模式的三个特点:

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

  2.单例类必须自己创建这个实例。

  3单例类必须给其他对象提供这个实例。

下面我主要介绍两种经典的单例设计模式:

一.懒汉模式

 1 //懒汉模式
 2 public static Singleton{
 3      //创建单例模式内的唯一实例
 4     private static singeton single= null;    
 5     //注意这里构造方法的修饰符变成了private
 6     private Sigleton(){
 7     }
 8     //静态工厂方法
 9     private static Singleton getInstance(){
10         if(single == null){
11             single = new Singleton();
12         }
13         return single;
14     }
View Code

       这种懒汉模式在第一次调用的时候创建了实例对象,但是存在着线程不安全的缺点。不过可以通过使用同步synchronized关键字来完善新能具体写法如下:

   将上面的静态工厂方法改成:

   public static syschronized Singleton getInstance(){     }

二.饿汉模式

 1 //饿汉模式
 2 public static Singleton{
 3 
 4     //私有的构造方法
 5     private Singleton(){
 6     }
 7 
 8     //这里直接创建唯一实例,注意加了final关键字
 9     private static final Singleton single = new Singleon();
10 
11     //静态工厂方法
12     public static Singleton getInstance(){
13     return single;
14     }
15 }
View Code


通过对比我们也能很容易看出饿汉模式的优缺点:
优点:直接创建对象,线程安全。
缺点:如果创建单例对象比较大,创建后又迟迟不能使用,则消耗资源。
 
       有些事或者有些东西或许从来没有见过,我们在第一次接触的时候可能会感觉到不适。走出舒适区,去学习和克服困难,然后获取成就感,并且培养解决问题的能力,这就是我学习的主要动力。
    文章的作者算是个小白,如果有什么地方说的不对,请不吝赐教。

posted @ 2017-03-20 17:23  呜呼~厉害了  阅读(81)  评论(0编辑  收藏