经典设计模式——单例模式

    有些时候,允许自由创建某个类的实例没有意义,还可能造成系统性能下降(因为创建对象所带来的系统开销问题)。例如整个系统中只有一个窗口管理器,只有一个假脱机打印设备;在JavaEE应用中可能只需要一个数据库引擎访问点,Hibernate访问时只需要一个SessionFactory实例,如果在系统中为它们创建多个实例就没有太大的意义。

    如果一个类始终只能创建一个实例,则这个类被成为单例类,这种模式就被称为单例模式。

    对于Spring框架而言,可以在配置Bean实例时指定scope="singleton"来配置单例模式。不仅如此,如果配置<bean../>元素时如果没有指定scope属性,则该实例默认就是单例的行为方式。

    Spring推荐将所有的业务组件,DAO组件,数据源等配置成单例的行为方式,因为这些组件无需保存任何用户状态,故所有客户端都可以共享这些业务逻辑组件、DAO组件等。如果不借助Spring框架,我们也可以手动实现单例模式。为了保证该类只能产生一个实例,程序不能允许自由创建该类的对象,因此我们需要使用private来修饰该类的构造器,从而将其隐藏起来。

    将构造器隐藏起来后,需要提供一个public方法来作为访问该类的访问点,用于创建该类的对象,且该方法必须使用static修饰(因为在调用方法前还不存在对象,因此调用该方法的不可能是对象,只能是类)。

    除此之外,该类还必须缓存已经创建的对象,否则该类无法知道是否曾经创建过实例,也就无法保证只创建了一个实例。为此该类需要使用一个静态属性来保存曾经创建的实例,且该属性需要被静态方法访问,所以属性也应该使用static修饰。

    下面是一个单例类的实例:

?


1

2

3

4

5

6

7

8

9

10

11

12

13

public class Singleton {

    //使用这个对象来缓存已经创建的实例

    private static Singleton singleton;

    //构造函数是private的,因此只能在本类中访问

    private Singleton(){}

    //这个public方法来获取这个创建的实例

    public static Singleton getInstance() {

        if (instance == null) {

            singleton = new Singleton();

        }

        return singleton;

    }

}

    下面是测试类:

?


1

2

3

4

5

6

7

public class Test {

    public static void main(String args[]) {

        Singleton s1 = Singleton.getInstance();

        Singleton s2 = Singleton.getInstance();

        System.out.println(s1==s2);//将输出true

    }

}

    在上面的Test类的代码中,只有通过Singleton的getInstance方法才可以获得Singleton的实例。在第一次调用时会在Singleton类中创建一个示例,第二次调用则返回这个已经创建的实例,以后每次调用也是。这就保证了Singleton实例只创建了一次。由于每次调用都返回的是同一个实例,因此,在Test中将输出true。

    综上,一般的单例模式的类都具有以下特点:

  • 私有构造器
  • 私有静态类成员变量
  • 公有获取该变量的方法
时间: 2024-10-23 17:10:18

经典设计模式——单例模式的相关文章

Java经典设计模式之十一种行为型模式(附实例和详解)

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 目录(?)[+] Java经典设计模式共有21中,分为三大类:创建型模式(5种).结构型模式(7种)和行为型模式(11种). 本文主要讲行为型模式,创建型模式和结构型模式可以看博主的另外两篇文章:Java经典设计模式之五大创建型模式(附实例和详解). Java经典设计模式之七大结构型模式(附实例和详解). 行为型模式细分为如下11种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式

Java经典设计模式之七大结构型模式(附实例和详解)

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 目录(?)[+] 博主在大三的时候有上过设计模式这一门课,但是当时很多都基本没有听懂,重点是也没有细听,因为觉得没什么卵用,硬是要搞那么复杂干嘛.因此设计模式建议工作半年以上的猿友阅读起来才会理解的比较深刻.当然,你没事做看看也是没有坏处的. 总体来说设计模式分为三大类:创建型模式.结构型模式和行为型模式. 博主的上一篇文章已经提到过创建型模式,此外该文章还有设计模式概况和设计模式的六大原则

学习JavaScript设计模式(单例模式)_javascript技巧

单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点. 单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池.全局缓存.浏览器的window对象.在js开发中,单例模式的用途同样非常广泛.试想一下,当我们单击登录按钮的时候,页面中会出现一个登录框,而这个浮窗是唯一的,无论单击多少次登录按钮,这个浮窗只会被创建一次.因此这个登录浮窗就适合用单例模式. 1.单例模式的使用场景 在使用一种模式之前,我们最好要知道,这种模式的使用场景.用了这么久的单例模式,竟全然不知!用它

跟屌丝大哥学设计模式-单例模式

概念: java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例.饿汉式单例.登记式单例三种.哈哈 我们可以这样分 屌丝单例模式:懒汉式屌丝单例,饿汉式屌丝单例,登记式屌丝单例. 单例模式有一下特点: 1.单例类只能有一个实例. 2.单例类必须自己自己创建自己的唯一实例. 3.单例类必须给所有其他对象提供这一实例. 单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例.在计算机系统中,线程池.缓存.日志对象.对话框.打印机.显卡的驱动程序对象常被设计成单例.这些应用都

JS设计模式 单例模式 模块模式

关于设计模式 先说说什么是设计模式吧.很多人都觉得"设计模式"这东西很玄乎,把Gof四人帮的<Design Patterns>奉为编程圣经,而我却觉得大可不必.设计模式说白了,就是在特定环境下解决某类常见问题的一种套路,按着这种套路去做就会很得心应手.但是,这并不代表这些设计模式是放之四海皆准,更不是说套着设计模式做的东西就一定是最好维护.性能最佳.至高无上的了.就算你不知道什么设计模式,只要思路正确,也能写出设计模式来. 有大师说,设计模式其实是对语言缺陷的一种弥补.这里

Java经典设计模式之五大创建型模式(附实例和详解)

版权声明:本文为博主原创文章,转载注明出处http://blog.csdn.net/u013142781 目录(?)[+] 一.概况 总体来说设计模式分为三大类: (1)创建型模式,共五种:工厂方法模式.抽象工厂模式.单例模式.建造者模式.原型模式. (2)结构型模式,共七种:适配器模式.装饰器模式.代理模式.外观模式.桥接模式.组合模式.享元模式. (3)行为型模式,共十一种:策略模式.模板方法模式.观察者模式.迭代子模式.责任链模式.命令模式.备忘录模式.状态模式.访问者模式.中介者模式.解

设计模式——单例模式

       学习设计模式也有一段时间了,看了些书籍也一直在园子里关注设计模式的文章,无奈动手比较少,仅仅几个设计模式拿来应用过,其它的基本上仅限于了解概念而 已.悲哉!悲哉!前阵子在项目里居然发现可以应用单例模式,呵呵,颇有些惊喜.故写下面的.以此巩固和梳理自己的知识,加深理解. 什么叫单例模式? 单例模式又叫做单态模式或者单件模式      概念1(GOF):单例模式(Single)是指保证一个类仅有一个实例,并提供一个访问它的全局访问点       概念2:单例模式确保某一个类只有一个实例

iOS设计模式 - 单例模式

IOS设计模式单例类 Made By HeYang 内容大纲: 1.单例模式 2.编写严格的单例 3.利用单例模式优化本地存储 4.重写allocWithZone实现单例 5.使用异常处理强制避免init创建实例 6.MRC下的单例模式,然后宏定义抽取单例类(兼顾ARC和MRC) 7.附录 1.单例模式 单例模式的描述: 系统中的一个类只提供一个实例供外界使用. 下面举几个IOS开发中常用的几个单例: [[UIApplication sharedApplication] statusBarFra

Java设计模式--单例模式

单例模式 保证一个类仅有一个实例,并提供一个访问它的全局访问点. Singleton Pattern Ensure a class only has one instance, and provide a global point of access to it. 类图 模式的结构与使用 单例方法模式的结构中包括一种角色. + 单件类(Singleton):单件类只可以创建出一个实例. java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种: 懒汉式单例 饿汉式单例 登