设计模式--单例模式(学习笔记)

定义:

     单例模式:保证一个类只有一个实例,并且提供一个访问它的全局访问点。(《大话设计模式定义》);

单例模式分为两种:

1>饿汉式单例类:自己被加载时就将自己实例化。

例子:

    
  private SingleExample() {
     
    }
private static  SingleExample singleExample=new SingleExample();
    @Override
    protected SingleExample getInstances() {
        return singleExample;
    }

2>懒汉式单例类:在第一次被引用时,才将自己实例化。

例子:

  private SingleExample() {

    }

    private static SingleExample singleExample = null;

    protected static SingleExample getInstances() {
        if (singleExample == null) {
            synchronized (SingleExample.class) {
                if (singleExample == null) {
                    singleExample = new SingleExample();

                }
            }
        }
        return singleExample;
    }

加同步块synchronized 是为了确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码区块,则它将一直处于等待状态,知道该对象被释放。

设计模式--单例模式(学习笔记),布布扣,bubuko.com

时间: 2024-10-14 01:01:31

设计模式--单例模式(学习笔记)的相关文章

《Head First 设计模式》学习笔记——适配器模式 + 外观模式

在ADO.NET中,对于我们从数据库中取出的数据都要放到一个DataSet中,不管你是Access的数据库,还是SQL的数据库,或者是Oracle的数据库都要放到DataSet中..NET中并没有提供如:SqlDataSet.OleDbDataSet.OracleDataSet等,它只提供了一种DataSet就是用SqlDataAdapte等去填充数据:为什么这一个DataSet能存放不同的数据呢?就是有这些适配器来适配.----题记 设计模式 适配器模式:将一个类的接口,转换成客户期待的另一个

《Head First 设计模式》学习笔记——模板方法模式

模板方法模式是类的行为模式.准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑.不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现.这就是模板方法模式的用意. 设计模式 模板方法模式:在一个方法中定义一个算法的框架,而将一些步骤延迟到子类中.模板方法使得子类可以在不改变算法结果的情况下,重新定义算法中的某些步骤. 模板就是一个方法,这个方法将算法定义成一组步骤,其中的任何步骤都可以是抽象的,由子类负责实现.这样可以确

《Head First 设计模式》学习笔记——策略模型

我们全都使用别人设计好的库与框架.我们讨论库与框架.利用他们的API编译成我们的程序.享受运用别人的代码所带来的长处.看看java api它所带来的功能:网络.GUI.IO等.库与框架长久以来,一直扮演着软件开发过程的重要角色,我们从中挑选所要的组件,把他们放进合适的地方.可是,库与框架无法帮助我们将应用组织成easy了解.easy维护.具有弹性的架构,所以要设计模式. 设计模式不会直接进入你的代码中,而是先进入你的"大脑"中.一旦你先在脑海中装入了很多关于模式的知识,就行開始新设计中

设计模式——单例模式学习

单例模式属于设计模式中的创建模式,即创建对象时,不再由我们直接实例化对象,而是根据特定场景,由程序来确定创建对象的方式,从而保证更大的性能.更好的架构优势. 1.概念 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.选择单例模式就是为了避免不一致状态.使用Singleton的好处还在于可以节省内存,因为它限制了实例的个数,有利于Java垃圾回收(garbage collection). Singleton模式看起来简单,使用方法也很方便,但是真正用好,是非常不容易,需要对

初探单例模式学习笔记

一.如何防止一个类产生多个实例呢? 1.不做任何措施,贴出一幅海报,通知所有程序员不能对这个类创建多个实例  (不现实) 2.让这个类无法创建另一个实例    -> 单例模式 二.但是对类进行实例化,它的决定权在类的外部,如何将决定权回归类的自身呢? -> 将构造函数变成private类型  ,不允许外界直接调用构造方法创建实例 三.但我们总要给外界提供一个途径获得类的实例 class T { private T(); public static T getInstance() { retur

《Head First 设计模式》学习笔记——观察者模式 + 装饰者模式

装饰者模式是JDK中另一个使用较多的设计模式,上一个是观察者模式(在Swing中大量使用),业内好的API设计无一离不开常见的设计模式,通常我们所说要阅读源码,也是为了学习大牛们的设计思路.----题记 设计模式 观察者模式:定义了对象之间一对多的依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会受到通知并自动更新. 装饰者模式:动态地将责任附加到对象上.若要扩展功能,装饰者提供比继承者更有弹性的替代方案. 设计原则 (1)封装变化. (2)多用组合,少用继承. (3)针对接口编程,而不是

《Head First 设计模式》学习笔记——单件模式

设计模式 单件模式:确保一个类只有一个实例,并提供一个全局访问点. 要点 单件模式确保程序中一个类最多只有一个实例. 在Java中实现单件模式需要私有的构造器.一个静态方法.一个静态变量. 确定在性能和资源上的限制,然后小心翼翼的选择适当的方案来实现单件,以解决多线程问题. 全局变量缺点 如果将对象赋值给一个全局变量,那么必须在程序一开始就创建好对象.万一对象非常耗费资源,而程序在这次执行过程中并没有使用它,就形成了浪费. 单件模式 public class Singleton { //利用一个

《大话设计模式》学习笔记系列--1. 简单工厂模式

简单工厂模式实现了一种"工厂"概念的面向对象设计模式,它可以在不指定对象具体类型的情况下创建对象.其实质是定义一个创建对象的接口,但让实现这个接口的类来决定实例化具体类.工厂方法让类的实例化推迟到子类中进行. 以书本上的计算器程序为例,其UML描述如下: 图中,AddOperator, SubtactOpertor继承算式基类Operator,而CreateOperator则是负责创建一个操作类,而不指明具体的子类类型. 下面,我们来看代码: 首先操作积累: /// <summa

设计模式:学习笔记(1)——单例模式

Java设计模式之单例模式 引入单例模式 什么是单例模式 对于某些类来说,我们只想其拥有一个实例,并且我们仅仅使用这一个实例:比如说线程池,缓存,对话框,处理偏好设置和注册表的对象.日志对象.显卡等设备的驱动程序的对象.这些类对象只能有一个,如果制造出多个实例,就会导致许多问题的产生.例如:程序的行为异常,资源使用过量或者冲突等等. 单例模式正是可以满足我们需求的设计原则:确保一个类只有一个实例,并提供一个全局访问点. 单例模式的经典实现 实现 理解 ? 首先,我们利用静态变量来记录Single

《大话设计模式》学习笔记17:单例模式

实现: 1.Singleton: public class Singleton { private static Singleton instance; //构造方法为private,外部代码不能直接实例化 private Singleton() { } public static Singleton GetInstance() { if(instance==null) { instance = new Singleton(); } return instance; } } 2.客户端代码: c