zoukankan      html  css  js  c++  java
  • 单例模式[ 懒汉模式 | 饿汉模式 ]

    程序开发中,有些对象只需要一个,
    比如 配置文件/ 工具类/ 线程池/ 缓存/ 日志对象等.只需要一个
    单例模式: 可以保证某些对象在程序运行中只有唯一的一个实例.
    显然单例模式的要点有三个;
    一是某个类只能有一个实例;
    二是它必须自行创建这个实例;
    三是它必须自行向整个系统提供这个实例。

    具体实现角度来说:
    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; } }

    ========================单例模式(完)========================

  • 相关阅读:
    jeecg中移动tbody中的tr可实现位置交换
    SQL Server中的Datediff移植到Oracle计算有误解决方案
    Oracle如何插入日期数据
    在 Oracle 9i 中创建 方案
    手把手教你uniapp 打包的H5怎么实现谷歌登录
    网站和项目的区别
    基础知识
    全球唯一标识GUID
    MVC3 Razor视图引擎基础语法
    缓存技术
  • 原文地址:https://www.cnblogs.com/xiaofeifei-wang/p/7472343.html
Copyright © 2011-2022 走看看