- 浏览: 25622 次
- 性别:
- 来自: 上海
文章分类
保证一个类只有一个实例,并提供一个访问它的全局访问点。
懒汉式和饿汉式
懒汉式
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
饿汉式
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
单例模式是用来保证这个类在运行期间只会被创建一个类实例。
这里的单例模式并不适用于集群环境。
懒汉模式体现了延迟加载和缓存的思想。
懒汉式是典型的时间换空间。即每次获取实例都会进行判断。
饿汉式是典型的空间换时间。
不加同步的懒汉式是线程不安全的。
实现线程安全:
1.加上synchronized,但是会降低访问的速度。
2.双重检查加锁。
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
饿汉式是线程安全的。
更好的单例实现方式
public class Singleton {
private static class SingletonHolder {
private static Singleton instance = new Singleton();
}
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
单例模式的本质是控制实例数目。
懒汉式和饿汉式
懒汉式
public class Singleton {
private static Singleton instance = null;
private Singleton() {
}
public static synchronized Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
饿汉式
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return instance;
}
}
单例模式是用来保证这个类在运行期间只会被创建一个类实例。
这里的单例模式并不适用于集群环境。
懒汉模式体现了延迟加载和缓存的思想。
懒汉式是典型的时间换空间。即每次获取实例都会进行判断。
饿汉式是典型的空间换时间。
不加同步的懒汉式是线程不安全的。
实现线程安全:
1.加上synchronized,但是会降低访问的速度。
2.双重检查加锁。
if(instance == null) {
synchronized(Singleton.class) {
if(instance == null) {
instance = new Singleton();
}
}
}
饿汉式是线程安全的。
更好的单例实现方式
public class Singleton {
private static class SingletonHolder {
private static Singleton instance = new Singleton();
}
private Singleton() {
}
public static Singleton getInstance() {
return SingletonHolder.instance;
}
}
单例模式的本质是控制实例数目。
发表评论
-
访问者模式Visitor预留通路,回调实现
2014-03-13 16:55 377表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各 ... -
桥接模式Bridge分离抽象和实现
2014-03-13 16:55 490将抽象部分与它的实现部分分离,使它们都可以独立地变化。 桥接 ... -
职责链模式Chain of Responsibility分离职责,动态组合
2014-03-12 17:25 341使多个对象都有机会处 ... -
装饰模式Decorator动态组合
2014-03-12 17:00 276动态地给一个对象添加 ... -
解释器模式Interpreters分离实现,解释执行
2014-03-12 16:27 294给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解 ... -
享元模式Flyweight分离与共享
2014-03-12 13:20 301运用共享技术有效地支持大量细粒度的对象。 安全实体:就是被系 ... -
备忘录模式Memento保存和回复内部状态
2014-03-11 17:47 432在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外 ... -
状态模式State根据状态来分离和选择行为
2014-03-11 17:20 398允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改 ... -
策略模式Strategy分离算法,选择实现
2014-03-11 15:26 416迪米特法则:LoD,最少知识原则。 如果两个类不必彼此直接通信 ... -
模板方法模式Templete Method 固定算法骨架
2014-03-11 11:15 537定义一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法 ... -
组合模式Composite统一叶子对象和组合对象
2014-03-07 18:18 306将对象组合成树型结构以表示“部分-整体”的层次结构。组合模式使 ... -
迭代器模式Iterator 控制访问聚合对象中的元素
2014-03-07 17:57 409提供一种方法顺序访问一个聚合对象中的各个元素,而又不需要暴露该 ... -
命令模式Command 封装请求
2014-03-07 16:26 379将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数 ... -
观察者模式Observer订阅模式-触发联动
2014-03-07 11:19 382定义对象间的一种一对 ... -
代理模式Proxy 为别人做嫁衣(控制对象访问)
2014-03-06 00:39 330为其他对象提供一种代理以控罪对这个对象的访问。 代理大致被分为 ... -
中介者模式Mediator 封装交互
2014-03-06 00:19 370用一个中介对象来封装 ... -
原型模式Prototype 克隆生成对象
2014-03-06 00:19 565用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 ... -
生成器模式Builder 分离整体构建算法和部件构造
2014-03-06 00:19 306将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建 ... -
抽象工厂模式 Abstract Factory 选择产品簇的实现
2014-03-06 00:20 417工厂方法模式或简单工 ... -
工厂方法模式Factory Method延迟到子类来选择实现
2014-03-05 18:12 950定义一个用于创建对象 ...
相关推荐
- **单例类只能有一个实例**:这是单例模式的基本原则,确保在整个应用程序中只有一个实例存在。 - **单例类必须自己创建并提供唯一的实例**:这通常通过将构造函数设为私有来实现,防止外部直接创建实例。 - **单例...
在Qt的Qml环境中,单例模式是一种设计模式,它允许在整个应用程序中创建一个全局访问点,确保某个类只有一个实例存在。这样的设计模式在需要共享数据或者服务时非常有用,避免了多处创建相同对象导致的数据不一致或...
单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。 ...
单例模式是软件设计模式中的一种,其主要目的是控制类的实例化过程,确保一个类在整个应用程序中只有一个实例存在。这种模式在很多场景下都非常有用,例如管理共享资源、配置对象或者全局日志服务等。下面我们将深入...
单例模式(Singleton Pattern)是一种常用的软件设计模式,在系统中确保某个类只有一个实例,并提供一个全局访问点。这种模式通常用于控制资源的消耗,比如数据库连接、线程池等,以及确保某个系统配置的一致性。 #...
在Go语言中,实现单例模式(Singleton Pattern)通常涉及确保一个类只有一个实例,并提供一个全局访问点来获取该实例。由于Go语言没有传统的类和对象概念,但具有结构体(struct)和函数,我们可以通过使用包级变量...
单例设计模式Singleton1是Java设计模式中的一种创建型模式,指某个类采用Singleton模式,则在这个类被创建后,只可能产生一个实例供外部访问,并且提供一个全局的访问点。这个模式的核心知识点可以总结为三点: 1. ...
首先,单例模式的要点是:① 某个类只能有一个实例。构造器私有化。② 它必须自行创建这个实例。含有一个该类的静态变量来保存这个唯一的实例。③ 它必须能向整个系统提供这个实例。 单例模式有两种实现方式:饿汉...
单例模式是一种常见的设计模式,它确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机的驱动程序对象常被设计成单例。这些应用都或多或少...
1.1.1 摘要 ...单例模式(Singleton)是几个创建模式中最对立的一个,它的主要特点不是根据用户程序调用生成一个新的实例,而是控制某个类型的实例唯一性,通过上图我们知道它包含的角色只有一个,
单例模式详解 单例模式是 Java 设计模式中的一种常见...单例模式是一种常见的设计模式,旨在保证某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。选择单例模式就是为了避免不一致状态,避免政出多头。
在C++编程中,单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。线程安全的单例模式在多线程环境下尤其重要,因为不正确的实现可能导致多个线程创建多个实例,这违反了单例模式...
单例模式是软件设计模式中的经典模式之一,其主要目的是控制类的实例化过程,确保在应用程序的整个生命周期中,某个类只有一个实例存在。这样的设计通常适用于那些需要频繁创建和销毁,但资源消耗较大的对象,如...
单例模式是确保某个类只有一个实例,并提供一个全局访问点来获取这个实例的设计模式。 2. 在MyApplication类中定义了一个LinkedList集合activityList,用于存放所有的Activity实例。 3. MyApplication提供了...
单例模式的目的是为了保证在一个进程中,某个类有且仅有一个实例。 实现单例模式的步骤: 1. 只有 private 构造方法,确保外部无法实例化; 2. 通过 private static 变量持有唯一实例,保证全局唯一性; 3. 通过 ...
其中,单例模式(Singleton Pattern)作为最简单的设计模式之一,旨在确保一个类只有一个实例,并提供一个全局访问点。尽管有些设计模式专家认为它过于简单而不能称为真正的“模式”,但单例模式因其简洁性和实用性...
单例模式的目的是确保一个类在任何时候都只有一个实例,并且提供一个全局访问点给外部程序使用。 ## 单例模式的定义 单例模式是一种常用的软件设计模式,通过单例模式可以保证系统中一个类只有一个实例,而且自行...
单例模式是一种创建型设计模式,使得类可以保证只有一个实例,并提供一个全局访问点来访问该实例。这个模式的主要目的是为了确保某个类只有一个实例,并且提供一个全局访问点来访问该实例。 场景管理单例模式的实现...
单例模式是一种常用的创建型设计模式,它的主要目的是确保某个类只有一个实例,并且提供一个全局访问点来获取该实例。这种模式适用于系统中只需要一个实例的情况,例如日志记录器、配置管理等。 #### 三、单例模式...