`
王国平
  • 浏览: 17640 次
  • 性别: Icon_minigender_1
  • 来自: 广州
文章分类
社区版块
存档分类
最新评论

两种单例模式

阅读更多

按照加载方式的不同,单例模式有2种实现

1、饿汉式

public class EagerSigleton(){
 private static final EagerSigleton m_instatnce=new EagerSigleton();
 //
私有构造方法

 private EagerSigleton(){
 
 }
 //
静态工厂方法
 public EagerSigleton getInstance(){
  return m_instatnce;
 }
}

2、懒汉式

public class LazySigleton(){
 private static final LazySigleton l_instatnce=null;
 //
私有构造方法

 private LazySigleton(){
 }
 //
静态工厂方法
 public synchronized LazySigleton getInstance(){
  if(l_instatnce==null){
   l_instatnce=new LazySigleton();
  }
  return l_instatnce;
 }
}

3、相同点

       单列模式属于创建模式,保证在同一个jvm中仅仅存在一个该类的实例。

       首先,可以看出,两种方式的构造函数都是私有的。

       其次,对外的接口都是工厂方法。

4、不同点

       这是最主要的。有两点必须注意:

       首先,可以看到。前者m_instatnce是在类装载的时候直接得到该类的实例,可以说是前期绑定的;而后者则是后期绑定的,就是说LazySigleton类加载的时候l_instatnce并没有指向具体的某个对象,而是当调用工厂方法getInstance()的时候才会实例化;

       那么这么作,各自的好处是什么呢?显然,前者速度快,后者速度慢;另外,后者可以加载其他的类,也就是动态扩展,灵活性高(注意,此时就不是对这个类的单例了,程序如下所示:)

      

 

interface sample{

       void dosomething();

}

public class sampleimplement implements sample{

       public void dosomething(){

              //do something;

       }

}

public class LazySigleton(){

      private static final sample l_instatnce=null;

      //私有构造方法

        private LazySigleton(){

      }

        //静态工厂方法

        public synchronized sample getInstance(){

         if(l_instatnce==null){

              Class c=Class.forName("xxx.sampleimplement");//可以从配置文件得到路径参数

              l_instatnce=c.newInstance();

         }

         return l_instatnce;

        }

}

       这样就可以根据配置文件配置的smple的实现类路径信息,利用反射机制得到我们希望的单例了。是不是有点用呢。当然这样的单例模式与本意不大一样了。

       其次,看看两种单例模式的工厂方法,一个带有synchronized方法,一个则没有。这是需要注意的地方

分享到:
评论

相关推荐

    三种工厂设计模式和两种单例模式

    在本文中,我们将深入探讨三种工厂设计模式——简单工厂模式、抽象工厂模式和工厂方法模式,以及两种单例模式——饿汉单例模式和懒汉单例模式。这些模式都是面向对象设计中的重要组成部分,对于理解和构建可维护、可...

    2种单例模式:1赖汉式:2饿汉式

    这里我们将详细探讨标题中提到的两种单例模式——"懒汉式"(Lazy Initialization)和"饿汉式"(Eager Initialization)。 1. **饿汉式单例模式** 饿汉式单例的特点是类加载时就完成了实例化,确保了线程安全,但...

    五种单例模式

    以上五种单例模式各有优缺点,开发者应根据实际需求选择合适的实现方式。在实际应用中,还需要考虑JVM的垃圾回收机制、序列化以及测试等方面的问题,以确保单例模式的正确性和健壮性。理解并熟练运用单例模式,有助...

    设计模式单例模式和工厂模式综合应用

    "设计模式单例模式和工厂模式综合应用"的主题聚焦于两种常用的设计模式:单例模式和工厂模式,并探讨它们如何协同工作来实现高效、灵活的代码结构。这个主题尤其适用于Java编程语言,因为Java的面向对象特性使得设计...

    IOS 中两种单例模式的写法实例详解

    了解了这两种单例模式的实现方式后,开发者可以根据项目的具体需求选择适合的方法。对于那些需要确保线程安全且性能要求较高的应用,使用GCD实现的单例模式更为合适。而简单的项目或对线程安全要求不高的场景,不...

    单例模式代码实现

    这个讲的是单例模式的多种不同实现方式,希望对单例感兴趣的同学看看

    设计模式之单例模式(结合工厂模式)

    单例模式是软件设计模式中的一种经典模式,它...通过阅读和分析这些代码,你可以更深入地理解这两种模式的实现细节及其在实际开发中的作用。同时,也可以尝试自己编写并测试不同的单例实现,以加深对单例模式的理解。

    设计模式——单例模式

    实现单例模式主要有两种方式:饿汉式和懒汉式。 ### **饿汉式单例模式** 饿汉式单例模式在类加载时就完成了实例化,因此也称为静态初始化。这种方式保证了线程安全,但可能会造成不必要的资源浪费,因为即使未使用...

    两种单例实现方式

    两种单例实现方式 单例模式是指一个类只有一个实例,并且提供了一个全局的访问点来访问该实例。单例模式是一种常用的设计模式,它可以确保某个类只有一个实例,并且提供了一个全局的访问点来访问该实例。 在 Java ...

    QT静态单例管理信号和槽

    在实际开发中,结合使用这两种单例模式可以有效管理应用程序的全局状态和通信。 总结来说,QT静态单例管理信号和槽是通过限制类实例化次数,提供全局访问点,以确保在整个应用程序中对特定资源的统一管理和通信。...

    C++两种线程安全的单例模式的实现

    使用"懒汉模式"与"饿汉模式"实现c++的单例模式,并且确保了单例模式的第一次实例化的线程安全,以及程序结束时,单例对象的资源收回,以防内存资源的泄漏

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

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

    设计模式——策略模式 & 单例模式

    策略模式和单例模式是软件设计中两种非常重要的设计模式,它们在实际开发中有着广泛的应用。在这篇文章中,我们将深入探讨这两种模式的核心概念、实现方式以及如何在实际项目中运用。 策略模式是一种行为设计模式,...

    设计模式 中的 单例模式和观察者模式

    在给定的标题和描述中,我们关注的是两种重要的设计模式:单例模式和观察者模式。 首先,让我们深入了解单例模式。单例模式是一种确保一个类只有一个实例,并提供全局访问点的设计模式。这种模式在资源管理、缓存、...

    设计模式单例模式

    单例模式是软件设计模式中的一种基础且广泛应用的模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在系统中需要频繁创建和销毁对象,且对象创建成本较高,或者需要共享资源的情况下非常...

    单例模式和工厂模式代码

    单例模式和工厂模式是两种常见的软件设计模式,在面向对象编程中扮演着重要的角色。它们都是为了解决特定的问题而提出的解决方案,但有着不同的应用场景和设计思路。 **单例模式** 是一种限制类实例化次数的模式,...

    单例模式_命令模式

    单例模式和命令模式是两种常见的设计模式,在软件开发中有着广泛的应用。它们分别解决了不同的问题,但在实际项目中,可以巧妙地结合使用,以提高代码的灵活性和可维护性。 单例模式是一种确保一个类只有一个实例,...

Global site tag (gtag.js) - Google Analytics