`

单例与多例、无状态与有状态

    博客分类:
  • OOD
 
阅读更多
单例:某个类系统范围内只有一个实例
多例:某个类在系统范围内同时有多个实例
无状态类:类中没有状态信息,一般是无成员变量或成员变量的值是不变的。 
有状态类:类中有状态信息,一般表现成员变量的值可变,在某一时该被调用而改变状态,之后再调用时获取其正确的状态。
有状态类的实例 ,一般是多例的,用于保存多个相同类型的不同状态值。因为只有一个实例,单线程重复调用情况下可能覆盖实例中之前的成员变量值、多线程下一次调用也可能覆盖实例中之前的成员变量值,造成状态丢失,就需要多个实例来保存不同的状态。
无状态类的实例,一般是单例的,因为没有状态,所以单线程下重复调用或多线程下调用对实例没有影响。
 
有状态的单例:这种情况是为了全局共享状态,状态的修改需要加锁,保证线程的安全性。
单线程下有状态的单例:线程是顺序执行的,在同一时该只存在一种状态,则可以使用单例,一般的使用方式是ThreadLocal.
 
 

 

分享到:
评论

相关推荐

    单例多例模式

    标准只有一个:当对象含有可改变的状态时(更精确的说就是在实际应用中该状态会改变),则多例,否则单例。例如,在Struts2中,action必须用多例,因为action本身含有请求参数的值,即可改变的状态。而在Struts1中,...

    C#描述中的单例与多例模式

    根据提供的标题、描述、标签及部分内容,我们可以详细探讨C#中的单例(Singleton)与多例(Multiton)设计模式。 ### 单例模式 单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问...

    单例模式和多例模式

    与单例模式不同,多例模式在某些场景下可以提供更多的灵活性。例如,在数据库连接池的设计中,可能需要多个数据库连接实例,但又不能无限创建,这时多例模式就很有用。实现多例模式可以使用枚举或工厂方法等。 在...

    Struts中的Action 单例与多例详解

    Struts框架中的Action设计有两种模式:单例(Singleton)与多例(Multiton/Prototype)。为了理解这两种模式在Struts2中的实现与适用场景,我们需先了解单例模式和多例模式的基本概念及其在Web应用中的行为特点。 ...

    浅谈Spring 的Controller 是单例or多例

    静态方法不会受到多线程的影响,但是它们无法访问非静态成员变量,所以这种方法只适用于与实例状态无关的逻辑。 6. **注意资源管理**:在Controller中,如果需要处理数据库连接、文件流等资源,确保使用try-with-...

    unity中涉及的三种单例模式

    在Unity游戏开发中,单例模式是一种常用的编程设计模式,它...C#经典单例和Unity内置单例提供了基本的实现,而线程安全的单例模式则是针对可能存在的多线程环境做出的优化。开发者可以根据项目需求选择适合的单例模式。

    java设计模式之多类java-设计模式之:多例(Multiton)模式

    在多例模式中,多例类可以有多个实例,这些实例可以是不同的状态,每个实例都有不同的属性。例如,在国际化解决方案中,多例模式可以用于实现消息资源对象,需要构造出能提供有限个实例,每个实例有个不相同的属性...

    状态模式(State Pattern)详解 一、状态模式简介 1.1 什么是状态模式? 1.2 为什么需要状态模式? 1.3 状态模式的核心思想 二、状态模式的结构 2.1 UML类图 2.2 各个组

    6.2 状态模式与单例模式结合 6.3 使用枚举实现状态模式 6.4 使用函数式接口实现状态模式 七、状态模式的常见问题与最佳实践 7.1 状态爆炸问题 7.2 状态模式与策略模式的区别 7.3 状态模式与观察者模式的区别 7.4 ...

    php设计模式之单例、多例设计模式的应用分析

    单例(Singleton)模式和不常见的多例(Multiton)模式控制着应用程序中类的数量。如模式名称,单例只能实例化一次,只有一个对象,多例模式可以多次实例化。基于Singleton的特性,我们经常用Singleton配置应用程序并...

    Spring bean为什么默认是单例

    无状态对象适合用于单例模式,因为它们不维护任何特定于实例的状态,而有状态对象在多线程环境下可能需要谨慎处理,以避免并发问题。 了解这些概念后,开发者可以根据应用程序的需求,灵活地配置Bean的作用域,以...

    python单例模式的多种实现方法

    - **可测试性**: 单例模式可能会影响单元测试,因为在不同的测试之间难以控制或重置单例的状态。 #### 总结 单例模式在Python中可以通过多种方式实现,每种方法都有其特点和适用场景。开发者应根据实际需求选择最...

    一个单例Demo

    在iOS开发中,单例模式被广泛应用于管理共享资源、配置设置或者在整个应用程序生命周期内保持一致状态的对象。这个"一个单例Demo"显然是为了帮助新手理解并实践这一概念。 在iOS开发中,我们通常使用Swift或...

    spring单例引起的线程安全问题

    【Spring 单例模式与线程安全】 在 Spring 框架中,bean 的实例化策略分为两种...在设计类时,应该根据业务需求谨慎选择实例化策略,并且对于可变状态的单例类,应采取适当的同步措施或改为多例模式,以确保线程安全。

    详解单例模学习资料

    - **不利于并行编程**:在多线程环境下,如果单例对象具有状态,那么这个状态可能会引发一致性问题。 在实际开发中,我们还需要注意单例模式与Java的序列化和克隆机制之间的冲突。默认情况下,序列化和克隆可能导致...

    设计模式——单例

    单例模式虽然有很多优点,但也存在一些潜在问题,比如它可能造成难以测试的代码,因为它隐藏了依赖关系。此外,过度使用单例可能导致代码过于紧密耦合,不利于维护和扩展。因此,在使用单例时,需要权衡其利弊,确保...

    JAVA单例模式应用研究

    1. **单例类只能有一个实例**:这意味着无论何时何地,整个系统中只能存在一个该类的实例。 2. **必须自行创建这个实例**:单例类需要在内部实现自己的实例化过程。 3. **必须自行向整个系统提供这个实例**:单例类...

    设计模式 For iOS-02-单例模式

    在使用单例时,开发者应当谨慎考虑是否真的需要单例模式,因为单例模式虽然有其优点,比如方便管理和访问全局状态,但也有潜在的缺点,比如不利于单元测试,以及可能引起循环引用等问题。单例模式最适用于那些真正...

    单例设计模式实现总结

    - **静态内部类**:`StaticInnerClassSingleton`利用类加载机制来保证单例的延迟初始化和线程安全,静态内部类只会被加载一次,从而确保单例。 - **枚举类型**:Java中,使用枚举实现单例是线程安全且防止反射攻击...

    fragment活动栈单例

    Fragment的生命周期与Activity紧密相关,当Activity状态改变时,关联的Fragment也会经历相应的生命周期回调。例如,当Activity暂停时,其包含的Fragment也会暂停;当Activity恢复时,Fragment也会随之恢复。因此,...

Global site tag (gtag.js) - Google Analytics