单例模式[ 懒汉模式 | 饿汉模式 ]
程序开发中,有些对象只需要一个,
比如 配置文件/ 工具类/ 线程池/ 缓存/ 日志对象等.只需要一个
单例模式: 可以保证某些对象在程序运行中只有唯一的一个实例.
显然单例模式的要点有三个;
一是某个类只能有一个实例;
二是它必须自行创建这个实例;
三是它必须自行向整个系统提供这个实例。
具体实现角度来说:
one:单例模式的类只提供私有的构造函数,
two:类定义中含有一个该类的静态私有对象,
thr:该类提供了一个静态的公有的函数用于创建或获取它本身的静态私有对象
单例模式:
应用场合: 有些类的对象只需要一个的情况下就足够
作用: 保证整个应用程序中某个类的实例有且只有一个
package com.xinyue.core.utils; public class SingleObject { //在类内部"创建"类的唯一实例, 使用 private static 修饰 private static SingleObject instance = new SingleObject(); //将类的构造方法私有化, 使用 private 修饰,这样该类就不会被实例化 private SingleObject(){} //创建一个用于外部获取该实例的方法, 使用 public static 修饰 public static SingleObject getInstance(){ return instance; } public void showMessage(){ System.out.println("这是是单例模式方法的输出信息哦!"); } }
public class SingleTest { public static void main(String[] args) { //不合法的构造函数 //编译时错误:构造函数 SingleObject() 是不可见的 //SingleObject object = new SingleObject(); //获取唯一可用的对象 SingleObject object = SingleObject.getInstance(); //显示消息 object.showMessage(); } }
类型: 饿汉模式 ; 懒汉模式
单例模式:------饿汉模式
将类的构造方法私有化, 使用 private 修饰
在类内部"创建"类的唯一实例, 使用 private static 修饰
创建一个用于外部获取实例的方法, 使用 public static 修饰
静态的成员属于类,可以直接通过类名来访问.
静态的成员,随着类的加载而同时被创建,供外部访问.
单例模式:-----懒汉模式
将类的构造方法私有化, 使用 private 修饰
在类内部"声明"类的唯一实例, 使用 private static 修饰, 此时的实例并没有被实例化
创建一个用于外部获取实例的方法, 使用 public static 修饰
饿汉模式---将类的实例进行了实例化,
懒汉模式---没有将类的实例进行实例化
饿汉模式---加载时比较慢,但运行时获取对象的速度比较快, 线程安全的
懒汉模式---加载时比较快,但运行时获取对象的速度比较慢, 线程不安全的
//1、懒汉式,线程不安全,因为没有加锁 synchronized
public class SingleObject { private static SingleObject instance; private SingleObject (){} public static SingleObject getInstance() { if (instance == null) { instance = new SingleObject(); } return instance; } }
//懒汉式,线程安全
public class Single { private static Single instance; private Single (){} public static synchronized Single getInstance() { if (instance == null) { instance = new Singleton(); } return instance; } }
========================单例模式(完)========================