1 单例模式要点
1.1 单例类只能有一个实例。
1.2 单例类必须自行创建唯一的实例
1.3 单例类必须向其它所有对象提供这一实例
2 单例类的实现方式:
2.1 饿汉式单例类:
class Singleton {
//私有,静态的类自身实例
private static Singleton instance = new Singleton();
//私有的构造子(构造器,构造函数,构造方法)
private Singleton(){}
//公开,静态的工厂方法
public static Singleton getInstance() {
return instance;
}
}
特点:在类加载的时候就创建了实例,且构造函数是私有的,实现了外界利用构造函数创造出多个实例,但是同时也由于构造函数私有是该类不能继承。
2.2 懒汉式单例类:
class LazySingleton {
//初始为null,暂不实例化
private static LazySingleton instance = null;
//私有的构造子(构造器,构造函数,构造方法)
private LazySingleton(){}
//公开,静态的工厂方法,需要使用时才去创建该单体
public static LazySingleton getInstance() {
if( instance == null ) {
instance = new LazySingleton();
}
return instance;
}
}
特点:在类第一次被引用的时候创建,且构造函数私有,使该类不能继承。
2.3 登记式单例类:
package pattern.singleton;
import java.util.HashMap;
import java.util.Map;
//登记式单例类.
//类似Spring里面的方法,将类名注册,下次从里面直接获取。
public class Singleton3 {
private static Map<String,Singleton3> map = new HashMap<String,Singleton3>();
static{
Singleton3 single = new Singleton3();
map.put(single.getClass().getName(), single);
}
//保护的默认构造函数
protected Singleton3(){}
//静态工厂方法,返还此类惟一的实例
public static Singleton3 getInstance(String name) {
if(name == null) {
name = Singleton3.class.getName();
System.out.println("name == null"+"--->name="+name);
}
if(map.get(name) == null) {
try {
map.put(name, (Singleton3) Class.forName(name).newInstance());
} catch (InstantiationException e) {
e.printStackTrace();
} catch (IllegalAccessException e) {
e.printStackTrace();
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
return map.get(name);
}
}
public class Singleton extends Singleton3 {
//默认构造函数
public Singleton(){}
public static Singleton getInstance(String name) {
return (Singleton) Singleton3 . getInstance(this.name())
}
}
特点:实现了类的继承;其子类必须在父类的帮助下才能实现实例化。由于子类和父类的数据类型不同,所以无法在父类中提供统一的方法;由于子类的构造函数是公开的,这样就允许产生的实例不再父类等集中了。
3 注意事项:
在多个JVM或者多个类加载器中应该注意单例模式的使用。因为多个类加载之间是绝缘的,多个JVM也是这样的
4 多例模式:
4.1 特点:多例类可有多个实例
4.2 必须自己创建、管理自己的实例,并且向外界提供自己的实例
分享到:
相关推荐
单例设计模式是一种常用的设计模式,它主要用于控制类的实例化过程,确保在整个应用程序中,一个类只有一个实例存在。这种模式常被用于那些需要频繁创建和销毁,且资源消耗较大的对象,例如数据库连接、线程池或者...
本文主要关注的是Java编程语言中的设计模式,结合“Java与模式-笔记二”的博客内容,我们将深入探讨其中的一些核心设计模式及其在实际开发中的应用。 首先,我们来谈谈单例模式(Singleton)。单例模式确保一个类...
这份"根据《JAVA与设计模式》整理的笔记及示例代码"涵盖了Java语言和设计模式的核心概念,旨在帮助开发者理解和应用这些模式。 一、设计模式的基本概念 设计模式是对在特定情境下软件设计问题的解决方案的一种描述...
本资源摘要信息是对《韩顺平_Java设计模式笔记.docx》的总结和分析,该笔记涵盖了 Java 设计模式的基础知识、设计模式的七大原则、原型设计模式、解释器设计模式、单例设计模式等内容,并对每个设计模式的原理、实现...
该资料介绍Java各类开发模式,包含以下教程:《深入浅出设计模式(中文版)》《Java单例模式》《Java设计模式-图解-附代码》《JAVA设计模式之单例模式(完整版)》《Java学习笔记(必看经典)》《Java总复习》《单例模式》...
Java 单例模式是一种设计模式,它用于保证一个类只有一个实例,并提供全局访问点。这种模式在需要控制类的实例化次数,或者当类的创建是昂贵的操作时非常有用。以下是对不同单例实现方式的详细说明: 1. **懒汉式**...
以上只是部分Java设计模式的概述,实际的学习笔记中可能还包括这些模式的实现示例、应用场景以及优缺点分析等,这些都是提高软件设计能力的重要资料。通过深入理解和实践这些设计模式,开发者可以编写出更加高效、可...
6. 设计模式:设计模式是解决常见软件设计问题的经验总结,如单例模式、工厂模式、观察者模式等。熟悉和应用这些模式,能够提升代码的可读性、可维护性和复用性。 7. SQL优化:在处理数据库操作时,了解如何编写...
本压缩包"计算机后端-Java-图解java设计模式笔记"提供了对Java设计模式的深入理解,通过图形化的方式帮助开发者更好地理解和应用这些模式。 1. **单例模式**:保证一个类只有一个实例,并提供一个全局访问点。常见...
Java设计模式是软件开发中的一种最佳实践,它们是为了解决特定场景下的设计问题而发展起来的。23种设计模式被广泛应用于提高代码的可重用性、可读性、可维护性和灵活性。韩顺平老师的Java设计模式课程通过生活中的...
本课程是使用Java来讲解设计模式,考虑到设计模式比较抽象,授课采用 图解+框架源码分析的方式 1) 内容包括: 设计模式七大原则(单一职责、接口隔离、依赖倒转、里氏替换、开闭原则、迪米特法则、合成复用)、UML...
这份"图解java设计模式_学习笔记"是针对Java开发者深入理解和应用设计模式的重要资源。在这里,我们将深入探讨Java设计模式的核心概念、分类以及它们在实际开发中的应用。 设计模式分为三大类:创建型、结构型和...
本资料包“java设计模式源码和笔记(第一部分)”提供了对Java设计模式的深入理解和实践。其中包含了个人的学习笔记和Eclipse环境下实现的源码,方便读者导入后直接运行,进行实践操作。 1. **单例模式**:确保一个...
单例设计模式** - 单例模式确保一个类只有一个实例,并提供一个全局访问点。 - 实现方式:使用私有构造器和静态工厂方法或枚举。 **15. 包装类型的操作** - 对于基本类型的包装类型,比较时应使用`equals()`而...
本资料“图解Java设计模式笔记总结word版本”聚焦于通过图文并茂的方式,深入浅出地解析各种设计模式。以下是基于这个主题的详细知识点讲解: 1. **设计模式的分类** - **创建型模式**:如单例(Singleton)、工厂...
设计模式是解决常见编程问题的模板,Java开发者应该熟悉常见的设计模式,如单例、工厂、观察者、装饰器、适配器等。这些模式能够提高代码的可读性、可维护性和复用性。 6. **概念区别(概念区别.md)**: 这个...
在学习Java设计模式时,掌握其概念、应用、优点和缺点非常重要。设计模式是软件开发中经常使用的一种通用解决方案模板,用于解决特定上下文中的常见问题。它们源于设计模式的研究,通常被认为是软件设计中的最佳实践...
8. **设计模式**:笔记中可能涵盖常见的设计模式,如工厂模式、单例模式、观察者模式、装饰器模式等,这些模式为解决特定问题提供了标准解决方案。 9. **异常性能优化**:学习如何通过优化代码、减少不必要的对象...
Java中的23种设计模式中,单例模式是一种常见且实用的模式。 **单例模式的定义** 单例模式有三个关键特性: 1. 构造器私有化:不允许外部直接通过new关键字创建实例。 2. 持有一个自己类型的静态属性:存储唯一的...