`

设计模式回顾之一:单例模式(Java的4种实现)

 
阅读更多

设计模式回顾系列文章:

主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。

------------------------------------------------

作为一个程序员,我并不知道"茴"字有4种写法。

但是,我知道单例有4种写法。

单例模式

目的:保证一个类仅有一个实例,并提供一个访问它的全局访问点。确保所有实体使用该对象相同的实例,而无需将引用传给他们。

程序实现:

实现一:急切实例化。

public class Singleton1{//急切实例化
	private static Singleton1 uniqueInstance=new Singleton1();
	private String objectName;

	private Singleton1(){}
	
    public static Singleton1 getInstance(){
    	return uniqueInstance;
    }
    
    public String getObjectName(){
		return objectName;
	}
    
	public void setObjectName(String objectName){
		this.objectName = objectName;
	}
}

实现二:延迟实例化。

public class Singleton2{//延迟实例化
	private static Singleton2 uniqueInstacne = null;
	private String objectName;
	
	private Singleton2(){}
	
	//synchronized会影响性能,适用于对性能要求不高时使用
	public static synchronized Singleton2 getInstance(){
		if(uniqueInstacne==null){
			uniqueInstacne=new Singleton2();
		}
        return uniqueInstacne;
	}

	public String getObjectName(){
		return objectName;
	}

	public void setObjectName(String objectName){
		this.objectName = objectName;
	}

}

实现三:双重检查加锁。

public class Singleton3{ //双重检查加锁
	//双重检查加锁只适用于Java 5
	//Java1.4或以下的版本中JVM对于volatile关键字的实现会导致双重加锁失效
	private volatile static Singleton3 uniqueInstance=null;
	private String objectName;
	
	private Singleton3(){}
	
	public static Singleton3 getInstance(){
		if(uniqueInstance==null){
			synchronized(Singleton3.class){
				if(uniqueInstance==null){
					uniqueInstance=new Singleton3();
				}
			}
		}
		return uniqueInstance;
	}
	
	public String getObjectName() {
		return objectName;
	}

	public void setObjectName(String objectName) {
		this.objectName = objectName;
	}
}

实现四:静态内部类。

public class Singleton4 {
	private static class Instance{
		public static final Singleton4 singleton = new Singleton4();
	}
	
	private Singleton4(){}
	private String objectName;
	
	public static Singleton4 getInstance(){
		return Instance.singleton;
	}
	
	public String getObjectName() {
		return objectName;
	}
	public void setObjectName(String objectName) {
		this.objectName = objectName;
	}
}

内部类Instance将只被装载一次。

 

注意:类的构造函数需要为保护或者私有类型,防止直接实例化这个类。

 

举例:系统中各种连接池、对象池、线程池等等只需要一个实例的对象。

分享到:
评论

相关推荐

    《Java设计模式》课程设计报告.docx

    这个项目涵盖了四种重要的设计模式:单例模式、代理模式、建造者模式和抽象工厂模式,为初学者提供了一个良好的实践平台。 1. **单例模式**: 单例模式是一种确保一个类只有一个实例并提供全局访问点的设计模式。...

    java设计模式pdf

    随后,在“面向对象方法”章节(第14页),作者回顾了面向对象编程的基本原则,并讨论了它们如何支持设计模式的实现。特别是,他提到了Java基础类库(Java Foundation Classes, JFC)的作用,这是一个包含大量标准...

    java设计模式迷你手册.rar

    Java设计模式迷你手册是一部浓缩了Java编程领域中设计模式精华的参考书,旨在帮助开发者理解和应用这些模式,提升代码质量和可维护性。设计模式是软件工程中...总之,掌握Java设计模式是提升编程技能的关键步骤之一。

    java设计模式的 3本书 1 ppt

    最后,"23种设计模式详解.ppt"可能是一个包含幻灯片形式的教程,它可能以简洁明了的方式展示了23种设计模式,每种模式的关键点、示例代码和应用场景可能都有所提及,对于快速回顾或教学来说非常方便。 通过阅读这些...

    软件设计模式--填空题+简答题(复习7).rar

    3. **Java设计模式应用**:Java作为广泛使用的编程语言,其社区发展出许多针对Java平台的设计模式实现,例如使用单例模式保证类的唯一实例,或者使用工厂模式简化对象的创建过程。 4. **体系结构**:在软件设计中,...

    设计模式 java 参考模式

    4. 策略模式:策略模式是一种行为设计模式,它使你能在运行时改变对象的行为。通过将算法封装在独立的策略类中,策略模式可以避免使用冗长的if-else语句,使得代码更加灵活且易于扩展。 5. 观察者模式:观察者模式...

    连接池单例代码

    2. **单例模式**:单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。单例模式可以避免对资源的重复创建,减少内存开销,提高性能。 3. **Apache Commons DBCP**:DBCP (Database...

    稳稳当当学java之设计模式(12).md

    本人的笔记,关于java基础中设计模式的内容 包括 1.作业回顾 2.内部类 2.1局部内部类 2.2静态内部类 2.3匿名内部类 3.设计模式 3.1单例模式 3.2代理模式 3.3观察者模式 3.4模板模式 4.练习

    侯捷2015设计模式课件-同济

    设计模式是软件工程中一种被广泛认可的、用来解决软件设计问题的通用方法模板。它最早由四人组(Gang of Four,简称GoF)的三位作者在1994年出版的《Design Patterns: Elements of Reusable Object-Oriented ...

    坦克游戏,用于复习设计模式,java基础和网络应用.zip

    在这个游戏中,我们可以看到多种设计模式的应用,如单例模式(Singleton)用于确保游戏全局只有一个实例,工厂模式(Factory)用于创建不同类型的坦克或炮弹,观察者模式(Observer)用于实现游戏事件的发布和订阅,...

    设计模式手册+API大全 网上资料整理.rar

    设计模式是软件工程中的一种重要思想,它是在特定情境下,为解决常见问题而形成的一套最佳实践。设计模式手册通常会涵盖多种经典的设计模式,包括创建型、结构型和行为型三大类,如单例模式、工厂模式、适配器模式、...

    JAVA期末复习试题

    1. **设计模式**:单例模式、工厂模式、装饰器模式等常见设计模式的理解与实现。 2. **Java EE**:Servlet、JSP、JDBC在Web开发中的应用,MVC设计模式。 3. **数据库操作**:SQL语言基础,JDBC连接数据库,预编译...

    以轻松的语言比喻了java的23种模式

    单例模式是一种创建型设计模式,它确保一个类只有一个实例,并提供一个全局访问点来获取这个实例。 **比喻理解:** 如果我们把MM比喻成一种稀缺资源,那么单例模式就像是一个约定,即每个人都只能拥有一个特定的MM...

    java模式下的编程要诀源码整理

    在Java编程领域,模式是一种被广泛采用的最佳实践,它提供了...对于有经验的开发者,这将是一个回顾和巩固设计模式的好材料。在实际项目中灵活运用这些模式,可以有效地解决复杂问题,提高软件系统的灵活性和可扩展性。

    Java十大经典案例

    9. **设计模式**:单例模式、工厂模式、观察者模式等是常见的设计模式,通过实现这些模式,开发者可以提升代码的可维护性和复用性。 10. **数据库操作**:JDBC(Java Database Connectivity)接口用于连接和操作...

    《Hear First设计模式》阅读笔记

    《Hear First设计模式》是一本关于设计模式的著作,其内容主要涵盖了Java语言中的设计模式应用。这本书通过深入浅出的方式,引导读者理解和掌握设计模式这一软件开发中的重要概念。设计模式是解决常见问题的经验总结...

    Design Patterns in Java

    设计模式是一种软件设计方法,它描述了在特定情况下解决常见问题的有效方法。这些模式不仅有助于提高代码的复用性和可维护性,还能帮助开发者更好地理解系统架构。本资料《Design Patterns Java Companion》由James ...

    1.java基础知识回顾 2.java高级语法研究 3.jvm研究 4.如果写出优雅高兴的java代码.zip

    4. **如何写出优雅高兴的Java代码**:这部分内容可能包含代码规范、设计模式、重构技巧、单元测试以及持续集成等实践。遵循良好的编码风格和设计原则可以使代码更易于理解和维护,提高团队协作效率。例如,使用SOLID...

    java知识点回顾

    根据提供的文件信息,我们可以整理出以下关于Java的重要知识点回顾: ### 1. Java 基本数据类型 Java 提供了多种基本数据类型,包括数值型、字符型和布尔型等。 - `byte`: 占用 1 字节,取值范围为 -128 至 127。...

    java 基础知识总结(经典)

    14. **设计模式**:单例、工厂、观察者等设计模式是解决常见问题的模板,学习并应用这些模式可以提高代码质量。 15. **Java工具**:如JDK自带的Javadoc用于生成API文档,JAR命令用于打包和运行Java应用程序,JVM...

Global site tag (gtag.js) - Google Analytics