`
469957559
  • 浏览: 39021 次
  • 性别: Icon_minigender_1
  • 来自: 天津
社区版块
存档分类
最新评论

单例模式的好处

 
阅读更多

需求大部分时候,我们把类的构造器定义成public访问权限,允许任何类自由创建这个 类的实例对象,但是某些时候,允许其他类自由创建这个类的对象没有任何意义,还可能造成了系统性能的下降(因为创建一个对象的系统开销问题),例如系统可 能自己hi有一个窗口管理器,一个假脱机打印设备或者一个数据库引擎访问点,这个时候如果在系统中创建多个对象就没有太大的时机意义,

如果一个类始终只能创建一个实例,则这个类就被称为单例类
这个时候我们就应该把类的构造器用private修饰,从而把这个类的所有构造器隐藏起来

根据封装型的原则:一旦把类的构造器隐藏起来,就需要提供一个public方法作为这个类的访问点,用于创建这个类的对象,且这个方法必须是static修饰(因为调用这个方法之前还不存在对象,因此调用这个方法不可能是对象,只能是类);
不仅如此,这个类还必须缓存已经创建的对象,不然这个类无法知道是不是已经创建了一个对象,也就无法只保证只创建了一个对象了,为此我们需要提供一个属性来保存曾经创建的对象,因为这个属性要被上面的静态方法访问,所以必须要用static修饰

下面我们用程序来说明这一点[code=java]package cn.itcast.heima
class Singleton
{
        //使用一个变量来缓存曾经创建的实例
        private static Singleton instance;
        //将构造器使用private修饰,隐藏该构造器
        private Singleton(){}
        //提供一个静态方法,用于返回Singleton实例
        //该方法可以加入自定义的控制,保证只产生一个Singleton对象
        public static Singleton getInstance()
        {
                //如果instance为null,表明还不曾创建Singleton对象
                //如果instance不为null,则表明已经创建了Singleton对象,将不会执行该方法
                if (instance == null)
                {
                        //创建一个Singleton对象,并将其缓存起来
                        instance = new Singleton();
                }
                return instance;
        }
}
public class TestSingleton
{
        public static void main(String[] args)
        {
                //创建Singleton对象不能通过构造器,只能通过getInstance方法
                Singleton s1 = Singleton.getInstance();
                Singleton s2 = Singleton.getInstance();
                //将输出true
                System.out.println(s1 == s2);
        }
}[/code]

分享到:
评论

相关推荐

    单例模式案例和笔记,通过案例来了解单例模式

    Java一共有23种设计模式,单例模式就是指一个类只有一个实例,且该类能...项目中一般可以通过单例模式来获取同一个对象来调用工具方法,这样的好处是节约内存资源,我没有必要创建多个不同的对象,因为这样消耗内存资源

    Singleton(单例模式)

    在Java应用中,单例对象能保证在一个...3、有些像交易所的核心交易引擎,控制着交易流程,如果该类可以创建多个的话,系统完全乱了,只有使用单例模式,才能保证核心交易服务器独立控制整个流程。 CSDN代码的详细解释。

    java单例设计模式的好处

    文章详细描述了什么是单例设计模式以及单例设计模式的的好处和应用。

    PHP实现单例模式建立数据库连接的方法分析

    本文实例讲述了PHP实现单例模式建立数据库连接的方法。分享给大家供大家参考,具体如下: 理解php单例模式 ...三、单例模式的好处 1:减少频繁创建,节省了cpu。 2:静态对象公用,节省了内存。 3:功

    PHP设计模式之单例模式原理与实现方法分析

    本文实例讲述了PHP设计模式之单例模式原理与实现方法。分享给大家供大家参考,具体如下: 一、什么是单例模式 ...使用单例模式的好处很大,以数据库操作为例。若不采用单例模式,当程序中出现大量数据库操作时

    QWidget和QML交互,通过元对象函数和单例模式及信号中转类

    重点:通过注册Widget单例类和SignalManager信号中转类,实现交互,这种方法的好处在于讲QML文件作为资源加载到QWidget中,并且在QML中使用Connections自动连接信号,方便管理,运用对象和单例模式思想

    学习JavaScript设计模式(单例模式)

    单例模式的定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。 单例模式是一种常用的模式,有一些对象我们往往只需要一个,比如线程池、全局缓存、浏览器的window对象。在js开发中,单例模式的用途同样...

    浅谈C#单例模式的实现和性能对比

    单例指的是只能存在一个实例的类(在C#中,更准确的说法是在每个AppDomain之中只能存在一个实例的类,它是软件工程中使用最多的几种模式之一。在第一个使用者创建了这个类的实例之后,其后需要使用这个类的就只能...

    深入理解Java中没那么简单的单例模式

    主要给大家详细介绍了Java单例模式,关于Java中的单例模式并非看起来那么简单的,为什么要这么说呢?下面通过这篇文章来一起看看吧,有需要的朋友们可以参考借鉴。

    javascript 单例模式演示代码 javascript面向对象编程

    单例模式的好处就是:类只实例化一次,省资源,节省开销,提高速度,学习js面向对象编程的朋友可以参考下。

    mfc单态模式的例子

    在C#、Java里面常用单态模式,单态模式的好处就不必说了,可提高代码的运行效率....按现有网站上搜索资料写单态模式时,调试总是提示失败,因此自己动手写一个例子供广大mfc入门学习者参考。

    设计模式课程设计---使用6个不同的设计模式完成绘图系统(java)

    运用到的设计模式有备忘录模式,迭代器模式,简单工厂模式,状态模式,模版方法模式,单例模式。 资源包含项目文件(eclipse)以及系统说明(docx文件),系统说明中说明了为什么要使用该模式,使用该模式有什么好处...

    php单例模式实现(对象只被创建一次)

    是我在php面试题中遇到的一道试题,单例模式按字面来看就是某一个类只有一个实例,这样做的好处还是很大的,比如说数据库的连接,我们只需要实例化一次,不需要每次都去new了,这样极大的降低了资源的耗费

    Java 设计模式详解超详细(含示例代码)

    创建型模式涉及对象的创建,包括单例模式、工厂模式、原型模式等;结构型模式关注对象之间的结构关系,包括适配器模式、桥接模式、组合模式等;行为型模式则关注对象的交互和职责分配,包括观察者模式、策略模式、...

    1.什么是设计模式? 2.设计模式是指在软件开发中,经过验证的,用于解决在特定环境下、重复出现的、特定问题的解决方案 3.说出

    4.简单工厂,外观模式,适配器模式,单例模式,工厂方法模式,抽象工厂模式,生成器模式,原型模式,中介者模式,代理模式,观察者模式,命令模式,迭代器模式,组合模式,模板方法模式,策略模式,状态模式,备忘录...

    美团Java 岗 154 道面试题.zip

    请用 Java 写出线程安全的单例模式 100.在 Java 中,什么叫观察者设计模式(observer design pattern)? 101.使用工厂模式最主要的好处是什么?在哪里使用? 102.举一个用 Java 实现的装饰模式(decorator design ...

    PHP中单例模式的使用场景与使用方法讲解

    单例模式按字面来看就是指某一个类只存在一个实例,这一点其实是与静态方法是相同的,只存在一个实例的好处是当我们需要使用某个类时只需要实例化一次,不需要每次都去new,极大的降低了资源的耗费,比如说数据库的...

    C_C++问题总结

    3.5.1 如何实现单例模式 3.5.2 如何实现单例模式 3.6 返回“引用”的格式、好处、注意事项 3.7 指针的表示 3.8 拷贝构造函数的调用时机 3.9 如何确保对象在抛出异常时也能被删除?什么是RAII? 3.10 仿函数的实现 ...

    JAVA单例模式源码-android-interview-questions:Android面试题和答案。这个repo适合面试官,被面试者,以

    JAVA例单模式源码安卓面试题 本文件适合您,如果... 你想面试一家新公司。 您在一家公司工作,但想知道面试中通常会提到哪些问题。 您是面试官,需要一些有用的问题或想挑战面试者 您只想提高您对 android 问题和...

    java设计模式选择题复习题.doc

    单例2.静态工厂3.工厂方法4.抽象工厂5.构造者6.原型7.适配器8桥接9.组合10.装 饰器11.外观12.享元14.代理15.迭代器16.观察者17.协调者18.模板方法19.策略20.责 任链21.命令22.空对象25.解释器 面向对象的设计原则有...

Global site tag (gtag.js) - Google Analytics