`
sxpyrgz
  • 浏览: 73731 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

为什么要使用单例

    博客分类:
  • java
阅读更多

为什么使用单例模式:在没有看下面以前,自个儿想一下,为什么使用????

 

 

为什么好多考官都要考单例模式,现将自已的理解做一下简单介绍:

  其实程序最初的思想是用NEW去创建一个实例对象,然后我们使用这个实例对象去做一些相关的操作,那如果有多个线程同时访问,那意味着要NEW多个实例对象,这样不仅使服务器性能下降,而且占用内存会越来越大,线程越多,占用内存越大。例:

  当我们需要访问的时候总是需要NEW一个CONNECT实例,然后才能用实例进行增删改的相关操作,然而这对于一个WEB客户端,在每次访问的时候都会在服务器端启动一个线程进行相关处理,这意味着,假如有一万个Web客户端将要启动一万个线程都去访问服务器,那将会,NEW一万个实例对象,这样不仅是非常占内存,而且性能也会急剧下降,后果可想而知......,因此优秀的程序员们绞尽脑汁的去优化自已的程序。有人提问:在这一万个WEB客户端线程间,是否能将CONNECT只用一个实例,让每一个WEB客户端都去访问这个连接?答案就是单例。如果我们创建一个单例程序,然后在服务器启动后,自始自终,服务器只对某个类进行一次实例,这就是单例。它不仅能节省服务器的内存,也能提高服务器的性能。如果平凡的使用NEW也会耗相当大的内存,所以在能够多个线程之间共用一个对象的时候,尽量用单例模式去实现该程序。
  SPRING是我们每个人都非常熟知的开源框架。SPRING中大量使用了单例去初始化一些BEAN。这使得我们N多WEB客户端在请求的时候不需要在NEW一些东西,只需要去得到单例的对象去操作,就可以了,它的依赖注入也只是将这些单例的实例对象得到然后进行注入到另一个对象,进行使用。

        Ext JS中也使用了不少的单例模式,JS使用单例,可以对客户浏览器中的内存得到充分的利用。

      以上只为个人理解,如有不恰当处,还望大家批评指正。

  

分享到:
评论
3 楼 sxpyrgz 2012-02-20  
braveone 写道
servlet也是使用单例模式,那么当多个用户请求时,是不是要处理完了一个用户请求,才能处理下一个客户请求呢,这样对效率有帮助吗?

每个用户请求都会有一个THREAD,你说的处理完了一个用户请求,才能处理下一个客户请求,这个是线程同步的问题,如果同步的话,就只能一个一个处理。
2 楼 braveone 2012-02-16  
servlet也是使用单例模式,那么当多个用户请求时,是不是要处理完了一个用户请求,才能处理下一个客户请求呢,这样对效率有帮助吗?
1 楼 happenZheng 2010-12-29  
下次,建议楼主把文字写大点。。。

相关推荐

    为什么要使用PHP单例模式及应用实例.docx

    ### 为什么要在PHP中使用单例模式及其应用实例 #### 一、单例模式的概念与特点 单例模式(Singleton Pattern)是一种常见的设计模式,在软件工程中被广泛应用于确保一个类仅有一个实例,并且该实例可以被全局访问...

    FMDB的自定义单例类的数据库demo

    ### 二、为什么要使用单例模式 单例模式是一种设计模式,它可以确保一个类只有一个实例,并提供一个全局访问点。在数据库管理中,使用单例模式可以确保在整个应用程序中只有一个数据库连接,避免了多线程环境下资源...

    PHP 单例模式解析和实战

    #### 二、为什么要使用单例模式? ##### 1、PHP的缺点 PHP作为一种解释型脚本语言,每个PHP页面被解释执行后,所有的相关资源都会被回收。这意味着PHP在语言级别上无法让某个对象常驻内存,这与Java等编译型语言...

    使用单例模式实现计数器

    在编程领域,设计模式是一种被广泛采用的最佳实践,它提供了在特定情况下解决常见问题的模板。其中,单例模式是一种非常经典且常用的...在C#中,通过合理的封装和访问控制,我们可以方便地创建并使用单例模式的计数器。

    使用单例模式创建学生管理系统(饿汉式、懒汉式)

    在这个场景中,我们将探讨如何使用单例模式来创建一个学生管理系统,主要涉及“饿汉式”和“懒汉式”两种实现方式。 **饿汉式单例** 饿汉式单例在类加载时就完成了实例化,因此它是线程安全的。这种方式保证了单例...

    ActionScript 3.0里使用单例模式

    ### ActionScript 3.0中的单例模式应用详解 #### 一、单例模式简介 在软件工程领域,设计模式是一套被广泛接受的解决特定问题的解决方案模板。其中,“单例模式”是一种常用的创建型设计模式,它保证一个类仅有一...

    单例多例模式

    三、为什么要用单例多例? 单例模式的优点是能够节省系统资源,避免了重复创建对象的开销。但是,单例模式也存在着并发问题,因为所有请求共享同一个对象实例。如果对象的状态会改变,那么单例模式可能会导致隐蔽的...

    单例模式详解 1. 什么是单例模式? 1.1 单例模式的核心要素 1.2 为什么需要单例模式? 2. 单例模式的实现方式 2.1 饿汉式(静态常量) 2.2 饿汉式(静态代码块) 2.3 懒汉式(线程

    1.2 为什么需要单例模式? 2. 单例模式的实现方式 2.1 饿汉式(静态常量) 2.2 饿汉式(静态代码块) 2.3 懒汉式(线程不安全) 2.4 懒汉式(线程安全,同步方法) 2.5 双重检查锁(DCL) 2.6 静态内部类 2.7 枚举...

    PHP单例模式是什么 php实现单例模式的方法

    **为什么要使用单例模式?** 1. **资源管理**:在PHP中,由于每次请求结束后,所有资源会被回收,单例模式可以确保在单个页面请求中,共享同一个对象,减少重复的资源创建,如数据库连接。 2. **全局配置**:单例...

    单例的使用--弹出框

    使用原生JavaScript写的单例小模式,适用于大多数的form表单中。

    单例模式的简单使用

    下面是一个简单的Swift中使用单例模式的例子: ```swift class Singleton { static let shared = Singleton() private init() {} // 确保外部无法通过init来创建实例 // 添加你需要共享的属性和方法 var ...

    php使用单例模式实现mysql类.zip

    在数据库操作中,特别是在MySQL交互时,使用单例模式可以有效地管理数据库连接,避免频繁创建和关闭连接,从而提高性能。下面将详细解释如何在PHP中通过单例模式实现一个MySQL操作类。 首先,我们要理解单例模式的...

    QT静态单例管理信号和槽

    6. **使用单例**:在应用程序的任何地方,只需调用`SingletonClass::getInstance()`,即可获取并操作单例实例。 ```cpp auto singleton = SingletonClass::getInstance(); singleton->doSomething(); ``` 这种实现...

    php使用单例模式实现mysql类

    一个php使用单例模式实现mysql类,封装mysql操作类,包括连接功能,及查询功能,封装getAll,getRow,getOne,afftect_rows()方法。

    42丨单例模式(中):我为什么不推荐使用单例模式?又有何替代方案?1

    - **继承**:单例类通常被设计为最终类,防止继承,这限制了代码的扩展性。 - **多态**:由于单例类通常不允许有子类,因此无法利用多态性来实现不同场景下的行为变化。 2. **隐藏类之间的依赖关系**: - 单例...

    使用C++11实现线程安全的单例模式

    总结来说,C++11通过`std::mutex`和`std::call_once`等工具,为实现线程安全的单例模式提供了强大支持。这种实现方式既简单又高效,避免了传统实现(如双重检查锁定)可能存在的性能问题。在实际项目中,根据具体...

    OC单例模式讲解

    #### 二、为什么使用单例模式? 1. **节省资源**:通过单例模式可以保证系统内存中该类只存在一个对象,从而避免了多次实例化同一对象所导致的性能开销。 2. **全局唯一性**:单例模式能够确保对象的唯一性,这对于...

    几种单例模式demo

    在`instance`为null且同步创建之前,进行第二次检查,提高效率。 ```java public class Singleton { private volatile static Singleton instance; private Singleton() {} public static Singleton ...

    单例省市级联

    因此,我们可以使用单例模式来实现这个数据管理类,确保任何时候访问这个类时,返回的都是同一个实例。 级联下拉列表,又称为联动选择,是指在一个下拉列表的选择会影响到另一个下拉列表的选项。例如,选择省份后,...

    运算符单例友元重载作业

    4. **运算符重载**:在单例类中,可能会有一个或多个运算符被重载,以便在使用单例对象时提供更直观的语法。例如,如果单例管理的是某种资源,你可能希望用"+"运算符来合并或添加资源。 5. **测试和使用**:编写...

Global site tag (gtag.js) - Google Analytics