单例/单体模式(Singleton)

首先,单例模式是对象的创建模式之一,此外还包括工厂模式。

单例模式的三个特点:

1,该类只有一个实例

2,该类自行创建该实例(在该类内部创建自身的实例对象)

3,向整个系统公开这个实例接口

Java中大概是这个样子

class Singleton {
    //私有,静态的类自身实例
    private static Singleton instance = new Singleton();
    //私有的构造子(构造器,构造函数,构造方法)
    private Singleton(){}
    //公开,静态的工厂方法
    public static Singleton getInstance() {
        return instance;
    }
}

这个单例类在自身被加载时instance会被实例化,即便加载器是静态的。因此,对于资源密集 ,配置开销较大的单体更合理的做法是将实例化(new)推迟到使用它的时候。即惰性加载(Lazy loading), 它常用于那些必须加载大量数据的单体。修改下

class LazySingleton {
    //初始为null,暂不实例化
    private static LazySingleton instance = null;
    //私有的构造子(构造器,构造函数,构造方法)
    private LazySingleton(){}
    //公开,静态的工厂方法,需要使用时才去创建该单体
    public static LazySingleton getInstance() {
        if( instance == null ) {
            instance = new LazySingleton();
        }
        return instance;
    }
}
时间: 2024-08-10 12:22:47

单例/单体模式(Singleton)的相关文章

设计模式之----单体(单例)模式

设计模式之--单体(单例)模式 1.介绍 从本章开始,我们会逐步介绍在JavaScript里使用的各种设计模式实现,在这里我不会过多地介绍模式本身的理论,而只会关注实现.OK,正式开始. 在传统开发工程师眼里,单例就是保证一个类只有一个实例,实现的方法一般是先判断实例存在与否,如果存在直接返回,如果不存在就创建了再返回,这就确保了一个类只有一个实例对象.在JavaScript里,单例作为一个命名空间提供者,从全局命名空间里提供一个唯一的访问点来访问该对象. 2. 简单单体与闭包单体 在JavaS

《连载 | 物联网框架ServerSuperIO教程》- 8.单例通讯模式开发及注意事项

1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架ServerSuperIO教程>2.服务实例的配置参数说明 <连载 | 物联网框架ServerSuperIO教程>- 3.设备驱动介绍 <连载 | 物联网框架ServerSuperIO教程>-4.如开发一套设备驱动,同时支持串口和网络通讯. <连载 | 物联网框架ServerSupe

Swift语言下的单例设计模式实现(SINGLETON)

一.意图 保证一个类公有一个实例,并提供一个访问它的全局访问点. 二.使用场景 1.使用场景 当类只能有一个实例而且客户可以从一个众所周知的访问点访问它时 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需更改代码就能使用一个扩展的实例时. 2.实现的重要三个步骤 私有化构造方法(Swift不支持) 使用一个静态变量保存实例的引用 提供一个全局的访问方法 三. Swift语言下的实现 Swift语言不支持变量及方法的权限,没有办法隐藏变量及方法,可以随意直接创建一个实例.单例的创建有很多写

Objective-c 单例设计模式(Singleton)

单例是一种重要的概念,它是一种极其便利的设计模式.在iPhone SDK中大量使用了单例的概念,例如,UIApplication的sharedApplication方法,任何时候都会返回一个当前应用程序的UIApplication实例. 有时候我们在一个程序几乎所有的地方都要使用某一数据并且要对其进行操作并且这个数据是单一的,全局只需要一个,这种情况下我们也许就会使用单例了 虽然单例很好用,但是不要滥用,因为单例会再程序运行过程中一直存在,不会被销毁(相当于直接在内存上扒了一块下来) 之前公司的

python实现单例工厂模式

class CarFactory: '''python实现单例工厂模式''' __obj = None __flg_init = True def __new__(cls, *args, **kwargs): if cls.__obj is None: cls.__obj = object.__new__(CarFactory) return cls.__obj def __init__(self): if CarFactory.__flg_init: print('工厂产生了') CarFac

Singleton(单例)模式和Double-Checked Locking(双重检查锁定)模式

问题描述 现在,不管开发一个多大的系统(至少我现在的部门是这样的),都会带一个日志功能:在实际开发过程中,会专门有一个日志模块,负责写日志,由于在系统的任何地方,我们都有可能要调用日志模块中的函数,进行写日志.那么,如何构造一个日志模块的实例呢?难道,每次new一个日志模块实例,写完日志,再delete,不要告诉我你是这么干的.在C++中,可以构造一个日志模块的全局变量,那么在任何地方就都可以用了,是的,不错.但是,我所在的开发部门的C++编码规范是参照Google的编码规范的. 全局变量在项目

菜鸟学设计模式系列笔记之单例设计模式(Singleton模式)

特殊的类: (1)类和它的实例间一般是一对多的关系.对大多数的类而言,都可以创建多个实例. 在需要这些实例时创建它们,在这些实例不再有用时删除它们.这些实例的来去伴随着内存的分配和归还. (2)但是有一些类,应该只有一个实例. 这个实例似乎应该在程序启动时被创建出来,且只有在程序结束时才被删除. Intent : 一个类仅有一个实例,自行实例化并向整个系统提供一个访问它的全局访问点 Motivation : 对于一些类来说,只有一个实例是很重要的 Singleton (1)定义一个Instanc

js21---单体(单例)模式

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>Unt

Java设计模式之单例设计模式(Singleton)

单例设计模式 单例模式在日常开发中用的也比较多,顾名思义就是一个类的对象在整个系统中只能有一个 优点: 1.单例模式会阻止其他对象实例化其自己的单例对象副本,从而确保所有对象都访问唯一实例 2.由于在整个系统中指存在一个实例对象,避免了频繁的创建和销毁对象,因此可以节约系统资源 3.避免了对共享资源的多重占用 4.自行创建这个单例对象,避免使用时再去创建 缺点: 1.单例模式没有抽象层,所以扩展性比较差 2.不适用于变化的对象,如果同一类型的对象需要在不同的场景下使用,单例就会引起数据的错误 3