`
Just-Do-it
  • 浏览: 28098 次
  • 性别: Icon_minigender_1
最近访客 更多访客>>
社区版块
存档分类
最新评论

Singleton 单例模式(懒汉方式和饿汉方式)

 
阅读更多
单例模式的概念:

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


关键点:

1)一个类只有一个实例       这是最基本的

2)它必须自行创建这个实例

3)它必须自行向整个系统提供这个实例

----------------------------------------------------------------------------------------------------------------------------------------------------


两种实现方式:


1  懒汉模式(类加载时不初始化)


复制代码

package Singleton;

public class LazySingleton {
    //懒汉式单例模式
    //比较懒,在类加载时,不创建实例,因此类加载速度快,但运行时获取对象的速度慢
   
   
    private static LazySingleton intance = null;//静态私用成员,没有初始化
   
    private LazySingleton()
    {
        //私有构造函数
    }
   
    public static synchronized LazySingleton getInstance()    //静态,同步,公开访问点
    {
        if(intance == null)
        {
            intance = new LazySingleton();
        }
        return intance;
    }
}

复制代码


关键点:(代码注释上已给出)

1)构造函数定义为私有----不能在别的类中来获取该类的对象,只能在类自身中得到自己的对象

2)成员变量为static的,没有初始化----类加载快,但访问类的唯一实例慢,static保证在自身类中获取自身对象

3)公开访问点getInstance: public和synchronized的-----public保证对外公开,同步保证多线程时的正确性(因为类变量不是在加载时初始化的)

优缺点见代码注释。




2  饿汉式单例模式(在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快)


复制代码

package Singleton;

public class EagerSingleton {
    //饿汉单例模式
    //在类加载时就完成了初始化,所以类加载较慢,但获取对象的速度快
   
    private static EagerSingleton instance = new EagerSingleton();//静态私有成员,已初始化
   
    private EagerSingleton()
    {
        //私有构造函数
    }
   
    public static EagerSingleton getInstance()    //静态,不用同步(类加载时已初始化,不会有多线程的问题)
    {
        return instance;
    }
   
   
}

复制代码


关键点:(代码注释已写)

1)私有构造函数

2)静态私有成员--在类加载时已初始化

3)公开访问点getInstance-----不需要同步,因为在类加载时已经初始化完毕,也不需要判断null,直接返回

优缺点见代码注释。
分享到:
评论

相关推荐

    老生常谈C++的单例模式与线程安全单例模式(懒汉/饿汉)

    1 教科书里的单例模式 我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法...

    C++两种线程安全的单例模式的实现

    使用"懒汉模式"与"饿汉模式"实现c++的单例模式,并且确保了单例模式的第一次实例化的线程安全,以及程序结束时,单例对象的资源收回,以防内存资源的泄漏

    一个单例模式的晋级过程(饿汉-懒汉-DCL-IoDH-枚举)

    一个单例模式的晋级过程(饿汉-懒汉-DCL-IoDH-枚举) 文章目录一个单例模式的晋级过程(饿汉-懒汉-DCL-IoDH-枚举)什么是单例?单例有哪些运用场景?实现1.饿汉式测试优化-final2.懒汉式优化-加锁同步3.DCL双检锁/双重...

    java单例模式看这一篇就够了

    深入分析java单例模式什么是单例模式单例模式的常见写法一、饿汉式单例优点缺点示例二、懒汉式单例示例1(普通写法)示例2(synchronized写法)示例3(DCL写法)示例4(内部类写法)三、注册式单例示例1(容器式)示例2(枚举式...

    常见设计模式—单例模式(Singleton)

    有很多直接把单例分成很多种,这里我就分两个大类(饿汉懒汉)在这里说啦。 单例模式(Singleton Pattern)是设计模式中最简单的模式之一,属于创建型模式。这种设计模式主要是类的对象只有一个实例,不需要每次new ...

    c# 单例模式的实现方法

    单例模式的实现分为两种:饿汉式和懒汉式。前者是在静态构造函数执行时就立即实例化,后者是在程序执行过程中第一次需要时再实例化。两者有各自适用的场景,实现方式也都很简单,唯一在设计时要考虑的一个问题就是:...

    单例设计模式.pdf

    单例模式(Singleton Pattern)是 Java 中最常见的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。

    详解C++实现线程安全的单例模式

    单例模式分为懒汉模式,跟饿汉模式两种。 首先给出饿汉模式的实现 正解: template class singleton { protected: singleton(){}; private: singleton(const singleton&){};//禁止拷贝 singleton& operator=...

    2.单例模式(Singleton)1

    1. 定义 2. 生活场景 3. 应用场景 4. 模式的优点和缺点 5. 饿汉式和懒汉式 6. 实现案例 7. 案例小结 1. 定义 2. 生活场景 3. 应用

    单例模式

    饿汉式 懒汉式 饿汉式 class Singleton { private static Singleton instance=new Singleton(); private Singleton(){} static Singleton getInstance() { return instance; } } 懒汉式 class Singleton { ...

    Java 单例模式实现

    饿汉式 线程安全,调用效率高,但是不能延时加载。 public class Singleton { private static Singleton instance = new Singleton(); private Singleton() {} public static Singleton getInstance(){ return ...

    设计模式的代码样例

    单例模式的实现通常有两种方式:“饿汉式”和“懒汉式”。 单例模式是将将构造方法限定为private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过提供的入口获得[例如getInstance()方法...

    java学习笔记

    1、Singleton单例模式:保证一个类只有一个实例,并提供一个访问它的全局访问点 1)解决的问题:如何只让设计的类只能创建一个对象 如何实现:饿汉式 & 懒汉式 A)饿汉式实现:安全 如Runtime()

    singleton.zip单例的几种实现demo,

    里面包含了,几种单例的实现demo,开包即用

    java8stream源码-Learning-Note:学习笔记持续更新

    单例模式 懒汉 public class SingleTon{ private static SingleTon INSTANCE = null; private SingleTon(){} public static SingleTon getInstance() { if(INSTANCE == null){ INSTANCE = new SingleTon(); } return...

    java简易版开心农场源码-GOF23:一起来学习设计模式吧~

    有单例模式, 工厂模式, 生成器模式, 原型模式 1. 单例模式 单例模式 Singleton 的核心思想: 保证一个类只有一个实例, 并且提供一个访问该实例的全局访问点 常见应用场景: Windows 的任务管理器, 回收站 单例模式的...

Global site tag (gtag.js) - Google Analytics