`
wsckw5
  • 浏览: 27607 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

单例模式---个人认识!!

阅读更多

单例模式是23中设计模式中使用率比较高的一个,网上也有很多他的介绍.但是他们大多都说"Singleton模式看起来简单,使用方法也很方便,但是真正用好,是非常不容易"  .而我通过项目的参与有了些心得:

1)内存上有切只有一个实例:学过尚学堂后有个毛病,总是爱从内存上剖析问题.我查看设计模式文档时上面说过: Singleton模式主要作用是保证在Java应用程序中,一个类Class只有一个实例存在.就是说在在内存中,对于Singleton下的类,内存中永远不可能存在2份或2份以上的实例!!这个在Spring中也有验证Singleton模式中所谓的对象范围是指在每一个ClassLoader指定class创建的实例有且仅有一个”.

2)不应有非常量的私有变量:我们知道了在内存中, Singleton模式的类有切只有一份.那就意味着你对给类的任何操作(方法的的使用,属性的操作等)其实都是对内存中那个唯一实例的操作!!因而可以说Singleton对于项目来说是具有全局性,唯一性的.这让我们想到了什么---静态的类.所以说对于静态类的要求就基本上适用于Singleton.因而Singleton类不应该有非常量的私有变量(详细:不是说不能有,是不应有.由于只有这一份实例,因而对其的操作都会改变这唯一的实例,因而非常容易造成线程的不安全,即使静态的变量也不是安全的,因而如有变量最好是常量,当然也有访问量统计这让的全局性变量的需求,那这个变量最好是静态的,而且方法要具有排它性---synchronized).

3)在项目中他应该只负责功能问题,而非存储数据:这个比较好理解,对于Spring来说Dao是单例模式.他只是连接数据库并查阅信息来反馈给用户接受,这是由于Dao没有私有变量,且在内存有且仅有一份,因而无法使用Dao本身来存储反馈回来的值,而只能选择其他含有大量私有变量,且在内存中可以有大量实例存在的类接受---如下面所说的Pojo类!!Pojo类在内存中有很多实例,因为他不是单例模式,这使的他可以有很多的私有变量来在内存中存储类型一致却内容不同的数据!!因而由于单例模式的特性,他在项目的工作不应是存储数据,而是解决某种功能性的需求!!

4)模式单例与Spring单例区别:这个是我在看Spring文档时才发现的.“Singleton模式中所谓的对象范围是指在每一个ClassLoader指定class创建的实例有且仅有一个。把Springsingleton作用域描述成一个container对应一个bean实例最为贴切就是说模式的单例是真正的单例,他在内存上只有一个,你不能掰出第二个来.Spring是在Spring管理中的bean是单例,Spring管理之外你可以new出一个新的来,而且在内存上是不同的对象.这个拿Jsf的配置最能体现.Jsf也是单例模式不过他是更窄的单例.对话式的单例:当一个对话(session)练到服务器时,Jsf会自动的生成这个对话的对象实例.不过在这个对话里这个实例是唯一!因而对于另一个对话它也有唯一的实例.因而可以说实例有很多.但对于一个会话你只拥有其中的一个!!

分享到:
评论

相关推荐

    设计模式-课件(pdf文件,java实例)

    1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。在Java中,可以通过双重检查锁定(Double-Checked Locking)或枚举方式来实现。 2. **工厂模式**:提供一个创建对象的接口,但让子类决定实例化哪...

    设计模式试题

    总的来说,“设计模式试题”是一个提升个人技能和团队协作效率的良好资源,通过解答这些问题,开发者不仅能加深对设计模式的认识,还能进一步提升自己的源代码编写水平,使软件设计更加优雅、高效。

    Pro-Objective-C-Design-Patterns-for-iOS

    这本书覆盖了多种经典的设计模式,如单例模式(Singleton)、抽象工厂模式(Abstract Factory)、责任链模式(Chain of Responsibility)和观察者模式(Observer)。同时,它还探讨了一些相对不太为人所熟知但同样...

    设计模式英文版-Design Pattern Explained

    1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。 2. **工厂方法模式**:定义一个创建对象的接口,但让子类决定实例化哪一个类。 3. **抽象工厂模式**:提供一个接口用于创建一系列相关或相互依赖...

    程序员的思维修炼--开发认识潜能的九堂课(高清电子书带书签)

    书中可能会讨论单例模式、工厂模式、观察者模式等常见模式,并讲述重构的意义和实践方法。 5. **学习与记忆策略**:高效的学习方法对于持续学习新技能的程序员至关重要。书中可能包括了间隔重复、深度学习、元认知...

    JAVA开发学习资料包.zip

    - **单例模式**:实现懒汉式和饿汉式的单例。 - **工厂模式**:了解简单工厂、工厂方法和抽象工厂模式。 - **观察者模式**:在Java中实现事件监听和发布订阅。 - **其他常用模式**:如装饰器模式、代理模式、...

    C#23种设计模式_示例源代码及PDF

    单例模式: 而且自行实例化并向整个系统提供这个实 单例模式 单例模式确保某一个类只有一个实例, 例单例模式。单例模式只应在有真正的“单一实例”的需求时才可使用。 结构型模式 6、ADAPTER —在朋友聚会上碰到...

    深入浅出设计模式样章

    2. 创建型设计模式:这些模式关注对象的创建过程,包括单例模式(Singleton)、工厂方法模式(Factory Method)、抽象工厂模式(Abstract Factory)、建造者模式(Builder)和原型模式(Prototype)。样章可能会对...

    二十三种设计模式【PDF版】

    设计模式之 Singleton(单态/单件) 阎宏博士讲解:单例(Singleton)模式 保证一个类只有一个实例,并提供一个访问它的全局访问点 设计模式之 Factory(工厂方法和抽象工厂) 使用工厂模式就象使用 new 一样频繁. ...

    黑马iOS入学面试必备

    - **单例设计模式**:学习如何创建和使用单例。 - **枚举、宏定义**:应用枚举和宏定义简化代码。 - **self与super**:了解在方法调用中的区别。 - **代理**:理解代理模式在代码协作中的作用。 - **strong与weak**...

    javascript 设计模式

    在介绍JavaScript设计模式的书籍中,会涉及诸如构造器模式、模块化模式、单例模式、观察者模式等经典设计模式,同时也会包含一些现代设计模式,例如MV*模式中的MVC、MVP、MVVM模式。MV*模式是一种在JavaScript中用于...

    java 反模式 卷1 pdf

    书中的反模式是通过对实践中出现问题的总结,提炼出的不良设计或编程习惯,通过分析这些反模式,我们可以更清晰地认识到问题的本质,从而采取正确的解决方案。 Java反模式涵盖了许多主题,包括对象设计、类设计、...

    08-本科-JAVA开发工程师 简历.doc

    在Struts2的运行机制方面有了深入认识,理解了Hibernate中的Session单例模式以及数据持久化概念。对ORM(对象关系映射)有了深刻理解,特别是Hibernate的使用。此外,他在IOC(依赖注入)和AOP(面向切面编程)方面...

    我的华为面试之旅!!!

    4. **设计模式**:熟悉常见的设计模式及其应用场景,比如单例模式(Singleton)、工厂模式(Factory)等,在面试中可能会被问到。 #### 面试流程 - **面试时间安排**:根据作者的经历,面试时间从早上9:00持续到...

    java程序员的心声

    - 常见的设计模式有单例模式、工厂模式、观察者模式等。 #### 2. 性能优化 - 了解Java虚拟机(JVM)的工作原理,对内存管理有一定的认识。 - 使用缓存技术、并行处理等方式来提高程序性能。 #### 3. 单元测试 - 单元...

    Java面试题汇总

    - **设计模式**:常见设计模式包括单例模式、工厂模式、观察者模式等。 - **软件项目过程认识**:涉及需求分析、设计、编码、测试、维护等阶段,强调迭代开发和持续改进。 - **RUP理论**:统一过程(Rational ...

    计算机网络技术个人简历.pdf

    求职者熟悉**设计模式**,包括工厂模式、单例模式、适配器模式、不变模式、装饰模式、代理模式,以及MVC模式和Spring的IoC。设计模式是解决常见问题的最佳实践,它们在软件开发中起着至关重要的作用。 此外,求职者...

    legendary-waffle-源码.rar

    4. **设计模式**:源码中可能蕴含着各种设计模式,如单例模式、工厂模式等,这些都是软件设计的重要思想,能提高代码的可维护性和复用性。 5. **注释和文档**:高质量的源码通常会带有详细的注释和文档,它们能帮助...

Global site tag (gtag.js) - Google Analytics