`
xijunhu
  • 浏览: 158049 次
  • 性别: Icon_minigender_1
  • 来自: 无锡
社区版块
存档分类
最新评论

单例模式

阅读更多

单例模式两种写法:

第一种

public class SingleSpoon  {        

   private static final SingleSpoon theSpoon=null;       

          

   private SingleSpoon() {}       

            

  public static SingleSpoon getTheSpoon() {       

      if (theSpoon == null) {       

           theSpoon = new SingleSpoon();       

       }       

       return theSpoon;       

   }       

           

   public String toString() {       

       return "Behold the glorious single spoon!";       

   }       

}     

 

第二种

public class SingleSpoon  {        

 

方案一: 就是不用单例, spring中bean的作用域设为prototype,每个请求对应一个实例.

或者取消单例模式,如配置文件修改为(Spring版本的不同,在DTD文件约束也不同):

<bean id="authgroupact" class="com.skywalk.framework.web.struts.action.AuthoriseGroupAct" autowire="byName" singleton="false">
        <property name="ibser">
            <ref bean="ibser" />
        </property>
    </bean>


方案二: spring中bean的作用域设为session ,每个session对应一个实例,解决了多线程问题.

再写一个拦截器,  清空 FieldError与actionerror

 

 

Java代码  

  1.   
  2. public class ClearFieldErrorInterceptor extends AbstractInterceptor {   
  3.   
  4. @Override  
  5. public String intercept(ActionInvocation invocation) throws Exception {   
  6. ActionSupport actionSupport = (ActionSupport)invocation.getAction();   
  7. actionSupport.clearErrorsAndMessages();   
  8. String resultCode = invocation.invoke();   
  9. return resultCode;   

参考:http://blog.sina.com.cn/s/blog_4baf091d0100gv8z.html

 

   private static final SingleSpoon theSpoon=new SingleSpoon();       

 

       // 私有的默认构造函数   

   private SingleSpoon() {}       

          // 静态工厂方法  

  public static SingleSpoon getTheSpoon() {       

           

       return theSpoon;       

   }       

           

   public String toString() {       

       return "Behold the glorious single spoon!";       

   }       

}     

 

由于单例模式不能被继承,可以使用一种特殊化的单例模式,单例注册表

 

spring 默认使用单例模式进行创建,也可以设置成原型模式,spring框架对单例的支持是使用单例注册表的方式进行的

 

具体参考:http://www.360doc.com/content/09/0725/10/61497_4436510.shtml

 

http://tailsherry.iteye.com/blog/124687

 

http://blog.csdn.net/liyong1115/archive/2008/01/22/2059170.aspx

 

strut2跟spring整合后,由于strut2中每次有一个请求就创建一个action实例,而spring是采用的单例模式,所以用spring管理struts2的action时就会出现下面的问题:

1) Action是单例,其中的FieldError,actionerror中的错误信息 会累加, 即使再次输入了正确的信息,也过不了验证.

2) Struts2的Action是有状态的,他有自己的成员属性, 所以在多线程下,会有问题.

参考:http://elf8848.iteye.com/blog/356746

分享到:
评论

相关推荐

    43丨单例模式(下):如何设计实现一个集群环境下的分布式单例模式?1

    单例模式是一种设计模式,旨在确保一个类只有一个实例,并提供全局访问点。在单例模式中,类的构造函数是私有的,防止外部直接创建对象,而是通过静态方法获取该类的唯一实例。单例模式的唯一性通常是在进程范围内,...

    单例模式介绍

    单例模式是软件设计模式中的一种,用于控制类的实例化过程,确保一个类在整个程序运行期间只有一个实例存在。在Android开发中,单例模式应用广泛,尤其在管理全局资源、提供公共服务或优化性能时非常实用。下面我们...

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

    单例模式是软件设计模式中的一种,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。在Java或类似的面向对象编程语言中,单例模式常用于管理共享资源,如数据库连接池、线程池或者配置文件等。在这个...

    Java单例模式简单示例

    Java单例模式简单示例 Java单例模式是一种非常常用的设计模式,它可以确保某个类只有一个实例,并提供一个全局访问点。下面我们将通过一个简单的示例来介绍Java单例模式的定义和使用技巧。 单例模式的定义 单例...

    7种单例模式

    单例模式是软件设计模式中的一种经典模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下非常有用,比如控制共享资源、管理配置对象等。下面将详细介绍七种常见的单例模式实现...

    Python单例模式实例详解

    Python中的单例模式是一种设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。这种模式常用于管理共享资源,如数据库连接、配置对象等,以避免资源的重复创建和销毁,提高效率。 单例模式的...

    SQLite连接池 单例模式

    SQLite连接池与单例模式是软件开发中常见的设计模式和技术,它们各自有不同的应用场景和优势。SQLite连接池是一种技术,用于管理数据库连接资源,通过预先创建一定数量的数据库连接,并将这些连接放入一个“池”中,...

    MySQL连接池 单例模式

    单例模式(Singleton Pattern)是一种常用的软件设计模式,用于确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。在连接池的实现中,单例模式可以用来确保整个应用程序中只有一个连接池实例在运行。...

    使用Java单例模式实现一个简单的日志记录器.txt

    ### 使用Java单例模式实现一个简单的日志记录器 #### 一、单例模式简介 单例模式是一种常用的软件设计模式,在该模式中,一个类只能创建一个实例,并且提供了一个全局访问点来访问该实例。单例模式的主要优点包括...

    PostgreSQL连接池 单例模式

    PostgreSQL连接池单例模式的运用,能够有效地提升数据库操作的性能,保障连接资源的合理利用,同时通过单例模式保证了连接池实例的全局唯一性,这对于大型应用系统和高并发场景下的数据库访问优化至关重要。

    c# 单例模式的实现方法

    c# 单例模式的实现方法 单例模式是所有设计模式中最简单的一种,主要用于确保整个应用程序中只有一个实例存在。c# 中实现单例模式有多种方法,本文将详细介绍饿汉式和懒汉式两种实现方法。 饿汉式 饿汉式是最简单...

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

    单例模式是设计模式的一种,它用于确保某一个类只有一个实例存在,而且自行实例化并向系统提供这个实例。在PHP中,单例模式的实现通常涉及以下几个关键点: 首先,需要有一个用于保存类的唯一实例的静态成员变量,...

    浅谈Spring单例Bean与单例模式的区别

    "浅谈Spring单例Bean与单例模式的区别" 本文主要介绍了Spring单例Bean与单例模式的区别,通过对比两者的定义、实现机制和应用场景,帮助读者更好地理解这两种概念的异同。 一、单例模式的定义和实现 单例模式是一...

    Java单例模式实例简述

    Java单例模式是一种常见的设计模式,它在软件开发中用于控制类的实例化过程,确保在任何情况下,对于特定类,系统中只有一个实例存在。这种模式对于那些需要频繁创建和销毁的对象,或者需要全局访问的对象,如配置...

    C#单例模式

    C#单例模式的应用,这里给的是C#里面一个单例模式的应用案例,面向对象过程中不可避免的需要用到单例模式,我在博客园中有详细说明单例模式怎么应用的,链接地址:...

    .Net 单例模式(Singleton)

    单例模式是一种常见的设计模式,用于确保一个类只有一个实例,同时向整个系统提供这个唯一的实例。这种模式在许多场景中都十分有用,例如,在一个系统中打印机假脱机程序(PrinterSpooler)应该是唯一的,以避免打印...

    php单例模式实现方法分析

    单例模式常用于控制实例的创建,以确保一个类只有一个实例,并且提供一个全局的访问点。在PHP开发中,单例模式非常有用,尤其是在需要限制对象实例数量时,比如数据库连接池的创建。 单例模式的核心思想在于它封装...

    C++ 单例模式的详解及实例

    C++ 单例模式的详解及实例 1.什么叫单例模式? 单例模式也称为单件模式、单子模式,可能是使用最广泛的设计模式。其意图是保证一个类仅有一个实例,并提供一个访问它的全局访问点,该实例被所有程序模块共享。有很...

    Java 单例模式实现

    饿汉式 线程安全,调用效率高,但是不能延时加载。 public class Singleton { private static Singleton instance = new ...如果方法没有 synchronized,单例没有 volatile , 则线程不安全。 public class Singleton {

    java使用静态关键字实现单例模式

    Java 使用静态关键字实现单例模式 在软件开发中,单例模式是一种常用的设计模式,它可以确保某个类只有一个实例,并提供了全局访问点。Java 语言提供了多种方式来实现单例模式,其中使用静态关键字是其中的一种。...

Global site tag (gtag.js) - Google Analytics