`

设计模式的理解--单例模式

    博客分类:
  • OOD
 
阅读更多

单例模式:

确保一个类只有一个实例,并提供一个全局的访问点。

 

 

 

为什么用单例模式:

无状态类:只需要一个实例就够了。多实例只会多占用内存,无线程安全问题。

有状态类:可以做到全局共享状态,但要注意线程安全问题。

 

如何确保一个类只有一个实例:

1.将构建器设为private,以确保该类不能被外部实例化

2.在类的内部进行实例化,并把实例保存在静态变量中

3.提供一个staticgetInstance 方法返回该实例

 




 


 代码示例一:

publicclass UserManager {

privatestatic UserManager userManager = new UserManager();

private UserManager(){

//私有构建器,外部不能实例化

}

public UserManager getInstance(){

returnuserManager;

}

 

publicvoid login(String userId){

//cache message of user

}

publicboolean isLogin(String userId){

// find message of user in cache

returnfalse;

}

}

 

代码示例二:

publicclass UserManager {

privatestaticvolatile UserManager userManager = null;

private UserManager(){

//私有构建器,外部不能实例化

}

public UserManager getInstance(){

if(userManager == null){

synchronized(UserManager.class){

if(userManager == null){

UserManager tempInstance = new UserManager();

userManager = tempInstance;

}

}

}

returnuserManager;

}

 

publicvoid login(String userId){

//cache message of user

}

publicboolean isLogin(String userId){

// find message of user in cache

returnfalse;

}

}

 

 

单例模式的缺点:

从整个系统层面看,会有N多类依赖了单例模式的具体类,违反了依赖抽像而不依赖具体类的原则,如果某一天要替换掉这个单例模式类,将会是繁琐的事情,同时也违反了开闭原则。

 

单例模式的应用场景:

一般情况下,接口不会发生变化的类,否则的话可以使用spring构建单例。

 

 

 

分享到:
评论

相关推荐

    设计模式--单例模式java例子

    单例模式是软件设计模式中的一种经典模式,它在Java编程中被广泛使用。这个模式的主要目的是确保一个类只有一个实例,并提供一个全局访问点。这样做的好处在于可以控制实例的数量,减少资源消耗,同时便于协调整个...

    大话设计模式--Singleton(单例模式)

    单例模式是软件设计模式中的一种经典模式,它在许多场景下被广泛使用...理解并熟练掌握单例模式的实现方式及其适用场景,对于编写高效、可维护的代码具有重要意义。在编程实践中,应根据项目需求选择最适合的实现策略。

    设计模式-单例设计模式

    5. **类间关系**:虽然在单例模式的类图中并不涉及其他类,但了解类之间的关系对于理解更复杂的设计模式非常重要。 #### 单例模式的构成要素 一个典型的单例模式包含以下关键要素: - **私有的构造方法**:防止外部...

    单例模式---初学 优点--缺点

    单例模式是软件设计模式中的一种经典模式,主要用于限制类的实例化,确保在整个应用程序中,该类只有一个实例存在。这种模式在很多场景下都非常有用,例如管理共享资源、全局配置或者提供一个全局访问点等。 单例...

    设计模式专题之(一)单例模式---设计模式单例模式模式示例代码(python--c++)

    单例模式是软件设计模式中的一种基础且广泛应用的模式,其主要目的是确保一个类只有一个实例,并提供一个全局访问点。这种模式在资源管理、配置对象、...理解并熟练运用单例模式,对于编写高效、可维护的代码至关重要。

    C++设计模式--基于Qt4开源跨平台开发框架

    通过学习《C++设计模式--基于Qt4开源跨平台开发框架》,开发者不仅可以掌握设计模式的本质和应用场景,还能深入理解Qt4框架的强大功能。结合两者,能够提高代码质量,降低维护成本,同时实现高效且可靠的跨平台应用...

    优秀的设计模式示例-单例模式

    单例模式是软件设计模式中的一种经典模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在很多场景下都非常...通过阅读和分析提供的示例,你将能够深入理解单例模式的工作原理,并将其应用到实际项目中。

    一例读懂设计模式-单例模式、简单工厂模式.zip

    本资源“一例读懂设计模式-单例模式、简单工厂模式.zip”旨在帮助初学者通过实例深入理解这两种重要设计模式:单例模式和简单工厂模式。以下是关于这两个模式的详细讲解。 1. **单例模式**: 单例模式是一种限制类...

    PHP5设计模式-单例模式

    单例模式是一种常用的设计模式,它在软件工程中扮演着控制类实例化过程的角色,确保一个类只有一个实例,并提供全局访问点。这种模式在PHP中尤其常见,特别是在需要频繁实例化然后销毁的对象,或者需要控制共享资源...

    常见设计模式-单例模式

    单例模式是设计模式中的一种,其主要目的是确保一个类只有一个实例,并且提供一个全局访问点来获取这个实例。在Java编程中,实现单例模式有多种方式,每种方式都有其优缺点。 1. **饿汉式**: 饿汉式在类加载时即...

    Qt单例设计模式(1-8)

    首先,让我们理解什么是单例设计模式。单例模式的主要目的是控制类的实例化过程,确保在整个应用程序中,只有一个类的实例存在。它防止了多个实例导致的资源浪费和潜在的同步问题。在C++和Qt中,实现单例模式通常...

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

    总的来说,这个项目为学习和理解单例模式和工厂模式在实际开发中的应用提供了一个很好的示例。通过结合这两种模式,可以构建出既保证了对象唯一性,又能灵活应对不同产品创建需求的系统。对于Java开发者来说,深入...

    设计模式ForiOS-02-单例模式.pdf

    单例模式是一种软件设计模式,它的核心思想是确保一个类在整个应用程序中只有一个实例,并提供一个全局访问点来获取这个实例。...理解单例模式的概念和正确使用方式,是每个iOS开发者必备的技能之一。

    1.设计模式-单例设计模式1

    单例设计模式是一种常用的设计模式,其主要目的是...理解并正确实现单例模式,能够帮助我们编写更加高效和易于维护的代码。同时,也需要关注其可能带来的问题,如序列化和反射攻击,以及在多线程环境下的线程安全问题。

    单例模式----数据库连接池管理类的应用

    单例模式是一种常用的软件设计模式,它保证一个类只有一个实例,并提供一个全局访问点。在IT行业中,尤其是在处理资源密集型任务如数据库连接时,单例模式被广泛应用。数据库连接池就是这种应用的一个典型例子。 ...

    单例模式-----<ant求职记之设计模式>

    通过学习和理解单例模式,开发者可以更好地管理和控制程序中的对象创建,提高系统的性能和可维护性。在实际工作中,源码分析和工具使用能力也是必不可少的技能,这有助于我们更好地理解和应用设计模式。

    Java设计模式----通俗易懂版

    这个资源"Java设计模式----通俗易懂版"显然是一个专门针对初学者或需要深入理解设计模式的开发者编写的指南。作者以形象生动的例子解释了23种经典的Java设计模式,使得复杂的概念变得更加易于理解。 首先,我们要...

    设计模式精解-GoF 23种设计模式解析附C++实现源码 完整版

    通过阅读《设计模式精解》并参考其中的C++实现源码,开发者能够更好地理解和应用这些模式,以构建更高效、可维护和可扩展的软件系统。在实际开发中,结合使用多种设计模式可以创造出灵活、可复用且易于理解的代码。

    设计模式源代码--工厂模式与单例

    本资源主要关注两种经典的设计模式:工厂模式和单例模式。这两种模式在实际编程中非常常见,尤其对于提高代码的可扩展性和可维护性至关重要。 ### 工厂模式 工厂模式是一种创建型设计模式,它提供了一种创建对象的...

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

    在项目中,`src`目录可能包含了这些设计模式的源码示例,可以用来学习和理解如何实际应用单例模式和工厂模式。通过阅读和分析这些代码,你可以更深入地理解这两种模式的实现细节及其在实际开发中的作用。同时,也...

Global site tag (gtag.js) - Google Analytics