转载请注明出处:http://blog.csdn.net/lhy_ycu/article/details/39784403
单例模式(Singleton):是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。好处主要有:1、某些类创建比较频繁,对于一些大型的对象,这是一笔很大的系统开销。2、省去了new操作符,降低了系统内存的使用频率,减轻GC压力。
单例模式主要有两种实现方式:1、懒汉式;2、饿汉式
一、uml建模
二、代码实现:
1、懒汉式
/** * 示例:单例--单例对象能保证在一个JVM中,该对象只有一个实例存在。 * * 缺点:这种做法在多线程环境下,不安全 * * 懒汉式 */ class Singleton { /** * 持有私有静态变量(也称类变量),防止被引用 * * 此处赋值为null,目的是实现延迟加载 (因为有些类比较庞大,所以延迟加载有助于提升性能) */ private static Singleton instance = null; /** 私有构造方法,防止被实例化 */ private Singleton() { } /** 静态工厂方法,创建实例 --只不过这里是创建自己,而且只能创建一个 */ public static Singleton getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } public void info() { System.out.println("this is a test method..."); } } /** * 客户端测试类 * * @author Leo */ public class Test { public static void main(String[] args) { Singleton s1 = Singleton.getInstance(); /** * 调用普通方法 */ s1.info(); Singleton s2 = Singleton.getInstance(); /** * 运行结果为true,说明s1、s2这两个类变量都指向内存中的同一个对象 */ System.out.println(s1 == s2); } }
2、饿汉式
/** * 饿汉式 */ class Singleton { private static Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return instance; } public void info() { System.out.println("this is a test method..."); } } /** * 客户端测试类 * * @author Leo */ public class Test { public static void main(String[] args) { Singleton s1 = Singleton.getInstance(); /** * 调用普通方法 */ s1.info(); Singleton s2 = Singleton.getInstance(); /** * 运行结果为true,说明s1、s2这两个类变量都指向内存中的同一个对象 */ System.out.println(s1 == s2); } }
3、如果考虑多线程,那么getInstance()方法要加同步synchronized,这时饿汉式比懒汉式要好,尽管资源利用率要差,但是不用同步。
/** * * 考虑多线程的时候,下面这种做法可以参考一下:--懒汉式 * * 在创建类的时候进行同步,所以只要将创建和getInstance()分开,单独为创建加synchronized关键字 * * 这种做法考虑性能的话,整个程序只需创建一次实例,所以性能也不会有什么影响。 * * @author Leo */ public class SingletonTest { private static SingletonTest instance = null; private SingletonTest() { } private static synchronized void syncInit() { if (instance == null) { instance = new SingletonTest(); } } public static SingletonTest getInstance() { if (instance == null) { syncInit(); } return instance; } }
三、总结
单例模式保证了一个类只有一个实例,且提供一个访问全局点的方式,更加灵活的保证了实例的创建和访问约束。系统中只有一个实例,因此构造方法应该为私有 饿汉式:类加载时直接创建静态实例;懒汉式:第一次需要时才创建一个实例,那么getInstance方法要加同步 饿汉式比懒汉式要好,尽管资源利用率要差,但是不用同步。
相关推荐
Java设计模式菜鸟系列教程 本教程对Java 23种设计模式进行了总结,涵盖了策略模式、观察者模式、装饰者模式、工厂方法模式、抽象工厂模式、单例模式、命令模式、适配器模式、外观模式、模板方法模式、迭代器模式、...
Java设计模式是软件开发中的重要概念,它是一种在特定情境下解决常见问题的模板或最佳实践。本主题将深入探讨三种关键的设计模式:单例模式、工厂模式和策略模式。 **单例模式** 是一种创建型设计模式,保证一个类...
单例模式是软件设计模式中的一种基础模式,用于确保一个类只有一个实例,并提供一个全局访问点。在Java中,单例模式的实现有很多种方式,包括懒汉式、饿汉式、双重检查锁定(DCL)等。下面我们将深入探讨这些实现...
c#代码介绍设计模式设计模式_单例模式 1)为什么会有单例模式 从单例模式的定义中我们可以看出——单例模式的使用自然是当我们的系统中某个对象只需要一个实例的情况,例如:操作系统中只能有一个任务管理器 2)...
设计模式(Design pattern)是一套被反复使用、...本章系Java之美[从菜鸟到高手演变]系列之设计模式,我们会以理论与实践相结合的方式来进行本章的学习,希望广大程序爱好者,学好设计模式,做一个优秀的软件工程师!
- 单例模式、工厂模式、观察者模式等经典设计模式的讲解。 - 设计模式在实际项目中的应用实例分析。 5. **Spring框架**: - Spring框架的核心功能:DI(依赖注入)、AOP(面向切面编程)。 - Spring MVC的工作...
本资源“设计模式学习经典篇之菜鸟篇”旨在为初学者提供一个全面而通俗易懂的设计模式学习路径。 设计模式的核心在于重用已验证的解决方案,以提高代码的可读性、可维护性和可扩展性。根据GOF(Gamma, Helm, ...
java常用的设计模式一个简单总结,如工厂模式、单例模式、代理模式等等。(楼主也是未入门的菜鸟,如有错误请及时联系楼主更正,谢谢!)
在这个"菜鸟教程设计模式之工厂模式代码整理"中,我们将深入探讨工厂模式的基本概念、结构以及如何在实际编程中应用。 工厂模式的核心思想是通过一个专门的工厂类来创建对象,而不是让客户端代码直接实例化具体的...
在Java中实现设计模式时,需要注意对线程安全、资源释放、异常处理等细节的把握。例如,在单例模式中,若未处理好线程同步,则可能会产生多个实例。工厂模式在实现时应避免在具体产品中出现具体工厂的代码,抽象工厂...
设计模式分为清晰类型,共23种创建型模式单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。结构类型模式队列模式、桥接模式、装饰模式、组合模式、外观模式、共享元模式、代理模式。行为类型模式模版方法...
在这个文档“23种设计模式知识要点.pdf”中,将详细阐述23个经典的设计模式,并且每个模式都有基于Java的代码示例,这使得理解和应用这些模式变得更加直观。 1. **创建型模式**:包括单例模式、工厂方法模式、抽象...
8. **JAVA设计模式.chm**:设计模式是软件工程中的重要概念,这本书详细介绍了23种经典设计模式,如单例模式、工厂模式、观察者模式等,对提升代码质量和可维护性有极大帮助。 9. **Oracle optimizer.chm**:可能...
简单例子说明了java的23种设计模式的原理,方便大家进行程序开发,对于入门级选手(我也是初学者)有很大的帮助
9. **设计模式**:介绍一些常见的设计模式,如单例、工厂、观察者等,以及如何在实际项目中应用它们。 进入Java Web开发领域,文档可能会涵盖: 10. **Servlet与JSP**:讲解如何使用Servlet进行后端处理,以及JSP...
### Java设计模式详解 #### 一、概述 Java设计模式是一种软件工程领域的经典主题,它主要探讨了在...以上只是部分设计模式的介绍,更多关于Java设计模式的内容及其实现细节,请参阅原书以获得更深入的理解和学习。
创建型设计模式如单例模式、工厂方法模式、抽象工厂模式等,它们关注的是对象的创建过程,使得代码更加灵活,易于维护和扩展。结构型设计模式如适配器模式、桥接模式、装饰器模式、组合模式、外观模式、享元模式和...
设计模式(菜鸟到高手)