设计模式--单例模式

什么是设计模式

设计模式(Design pattern)是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化;设计模式是软件工程的基石脉络,如同大厦的结构一样。

设计模式分类

设计模式分为三种类型,共23种

  • 创建型模式:单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
  • 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
  • 行为型模式:模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式、状态模式、策略模式、职责链模式、访问者模式。

单例模式

单例模式是最简单的设计模式之一,保证一个类仅有一个实例,并提供一个访问它的全局访问点。

适用性

  • 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时。
  • 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时。

例如:

配置文件、工具类、线程池、缓存、日志对象等

如果以上这些对象创造出多个实例,就会导致许多问题, 比如占用过多资源,不一致的结果等。那么如何保证整个应用中某个实例有且只有一个呢?这里我们就可以通过 单例模式来实现了。

单例模式种类

常见的单例模式分为如下两类:

  • 懒汉模式(线程不安全的)
  • 饿汉模式(线程安全的)

懒汉模式

class InstanceDemo2
{
    public static void main(String[] args){
        懒汉 懒=懒汉.getInstance();
        懒汉 汉=懒汉.getInstance();
        if(懒==汉){
            System.out.println("是同一个实例");
        }else{
            System.out.println("不是同一个实例");
        }
        
    }
}


//懒汉模式
class 懒汉{
    //1,将构造方法私有化,不允许外部直接创建对象
    private 懒汉(){}
    //2,声明类的唯一实例,使用private static 修饰
    private static 懒汉 lazy; //默认值为null
    //定义getInstance
    public static 懒汉 getInstance(){
        if(lazy==null){
            lazy=new 懒汉();
        }
        return lazy;
    }
}

饿汉模式

class InstanceDemo
{
    public static void main(String[] args){
        饿汉 饿=饿汉.getInstance();
        饿汉 汉=饿汉.getInstance();
        if(饿==汉){
            System.out.println("是同一个实例");
        }else{
            System.out.println("不是同一个实例");
        }
    }
}

class 饿汉{
    //1.限制外界不能随意的new对象
    private  饿汉(){}  
    //在类内部造对象,然后在将对象送出去
    //2.创建对象
    private static  final 饿汉 h=new 饿汉();
    //3.提供一个用于获实例的方法, 使用public static修饰
    public static 饿汉 getInstance(){
        return h;
    }
}

两种模式的区别

饿汉模式的特点是加载类是比较慢,但是运行时获取对象的速度比较快,线程安全,懒汉模式的特点是加载类是比较快,但是运行获取对象的速度比较慢,线程不安全

如以上文章或链接对你有帮助的话,别忘了在文章结尾处轻轻点击一下 “还不错”按钮或到页面右下角点击 “赞一个” 按钮哦。你也可以点击页面右边“分享”悬浮按钮哦,让更多的人阅读这篇文章。

作者:Li-Cheng
由于本人水平有限,文章在表述和代码方面如有不妥之处,欢迎批评指正。留下你的脚印,欢迎评论哦。你也可以关注我,一起学习哦!

(^_^)如果您觉得此文对您有帮助,打个赏喝个咖啡(^_^)

posted @ 2015-03-30 22:43  Li-Cheng  阅读(1172)  评论(10编辑  收藏  举报