设计模式回顾系列文章:
主要针对工作中常用常见的设计模式进行整理、总结,同时分享以供大家拍砖。
------------------------------------------------
作为一个程序员,我并不知道"茴"字有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将只被装载一次。
注意:类的构造函数需要为保护或者私有类型,防止直接实例化这个类。
举例:系统中各种连接池、对象池、线程池等等只需要一个实例的对象。
分享到:
相关推荐
实验五:单例模式.rar实验五:单例模式.rarjava设计模式
单例设计模式是一种创建型设计模式,它的主要目标是确保一个类在任何情况下都只有一个实例,并且提供全局访问点。这种模式在一些需要共享状态的场景下非常有用,比如数据库连接池等。单例模式有多种实现方式,其中...
本文实例讲述了JS 设计模式之:单例模式定义与实现方法。分享给大家供大家参考,具体如下: 良好的设计模式可以显著提高代码的可读性,降低复杂度和维护成本。笔者打算通过几篇文章通俗地讲一讲常见的或者实用的设计...
很有启发力的设计模式入门资料PPT,通过一步一步深入地讲述单例模式,发现简单的单例模式居然有如此之多的研究点。
作为对象的创建模式, 单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。这个类称为单例类譬如每台计算机可以有若干个打印机,但只能有一个Printer,以避免两个打印作业同时输出到打印机...
Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式Java SE程序 单例模式...
02_JavaSE面试题:单例设计模式
单例模式是最简单的一种设计模式,确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例, 本资源提供了用java语言实现简单的单例模式,供初学者参考
单例模式主要有懒汉式和饿汉式两种实现,饿汉式不会有线程安全的问题,但是提前构造对象占用了一定的资源,如果对内存要求较低的场景可以使用饿汉式实现;懒汉式应使用DCL机制来避免多线程竞争资源的问题,并且懒汉...
单例模式的实现饿汉式懒汉式线程安全的懒汉式登记式单例模式的优缺点单例模式的优点单例模式的缺点 单例模式是23个模式中比较简单的模式,应用也非常广泛 什么是单例模式? 单例模式的定义: Ensure a class ...
通过Java语言,主要实现了六种单例的生成方法,包括懒汉式、饿汉式、双重校验锁、枚举、静态内部类,可以根据实际情况选择使用
java设计模式中的单例模式,而单例模式又分为饿汉模式和懒汉模式
基于Java实现的23种设计模式Demo,抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式、外观模式、适配器模式等 Java设计模式共有23种,分别为:抽象工厂模式、建造模式、工厂方法模式、原型模式、单例模式...
设计模式之装饰模式Java实现和UML类设计图
一个简单的java工程,包含注释,一目了然,其中包含了单例模式的所有实现方式,懒汉式,饿汉式,双重校验,枚举,静态内部类等方式实现单例。
java 设计模式 mvc模式 单例模式 代理 工厂 简单工厂
软件体系结构实验报告
java模式之单例模式: 单例模式确保一个类只有一个实例,自行提供这个实例并向整个系统提供这个实例。 特点: 1,一个类只能有一个实例 2,自己创建这个实例 3,整个系统都要使用这个实例 例: 在下面的对象图...
目录 单例模式的概念 单例模式的要点 单例模式类图 单例模式归类 单例模式的应用场景 单例模式解决的问题 单例模式的实现方式 单例模式实现方式对比 单例模式的概念 单例模式,顾名思义就是只有一个实例,并且由它...
Java单例模式,其中:单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种