单例设计模式(基础学习,待补充。。。)
单例模式:采用一定的方法,保证在整个软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得该对象实例的方法。
单例模式有两种方式:①饿汉式②懒汉式
单例模式概述
单例模式也称之为单态模式,单子模式等;指的是在程序运行的过程中始终只存在一个对象(实例)。单例模式的表现形式又分为两种:
- 懒汉式(需要的时候才创建:以时间换空间的概念)
- 饿汉式(类加载即创建:以空间换时间的概念)
单例模式实现步骤:
1、构造器私有化private #{构造器名} {}
2、类的内部创建对象
3、向外暴露一个静态的公共方法 static getInstance
懒汉式
懒汉式即需要实例对象时才创建:存在线程安全问题
/**
* 单例模式 - 懒汉式(需要时才创建)
*/
public class Singleton {
private static Singleton instance; //15db9742
//构造器私有化,不允许外界随意访问(不允许随便创建对象)
private Singleton() {}
public static Singleton newInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
}
饿汉式
饿汉式即类加载时就创建实例对象。如果类中存在静态属性,调用静态属性时,会进行类加载,同时创建实例对象,存在资源浪费问题
/**
* 单例模式-饿汉式(类加载即创建对象)
*/
public class Singleton2 {
// 直接调用该静态类,也会实例化Singleton2这个类,
public static int num = 10;
private static Singleton2 instance = new Singleton2();
private Singleton2() {
public static Singleton2 newInstance() {
return instance;
}
}
应用场景
单例模式的使用场景十分广泛,比如:数据库连接池,字符串常量池,线程池等资源池,比如日历类,Runtime类等常见与系统环境交互相关的类。