zoukankan      html  css  js  c++  java
  • 单例模式(Singleton Pattern)

    1.单例模式

      单例模式是程序设计模式中的一种。是为了保证整个应用中某个实例有且只有一个。

      应用场合:开发中有些对象只需要一个。

      特点:有且只有一个。

      单例模式分为两种:

    •   饿汉模式
    •   懒汉模式

    2.饿汉模式

    2.1创建饿汉单例模式

      1.创建类Singleton,在类中把构造函数设为私有的private,不允许外部调用

      2.在类中调用私有的构造方法,创建实例,并且用private static修饰

      3.提供一个可以获取实例的方法(getInstance()),加上public static修饰

     1 public class Singleton {
     2     //1.将构造方法私有化,不允许外部直接创建对象
     3     private Singleton(){
     4     }
     5     //2.自己在类的内部创建一个实例,是唯一的,把实例设为static,静态的
     6     private static Singleton instance = new Singleton();
     7     
     8     //3.提供一个获取实例的方法
     9     public static Singleton getInstance() {
    10         return instance;
    11     }
    12 }

    2.2测试饿汉模式

      使用main方法测试,测试中调用2次getInstance(),比较2次的对象是否相等。

    1 public class Test {
    2     public static void main(String[] args){
    3         //调用singleton的静态实例
    4         Singleton s1 = Singleton.getInstance();
    5         Singleton s2 = Singleton.getInstance();
    6         System.out.println(s1==s2); //相等,为饿汉单例模式
    7     }
    8 }

    3.懒汉模式

    3.1创建懒汉单例模式

      1.创建类Singleton,在类中把构造函数设为私有的private,不允许外部调用

      2.在类中调用私有的构造方法,声明一个唯一实例对象,并且用private static修饰

      3.提供一个可以获取实例的方法(getInstance()),加上public static修饰,并且通过 if 语句判断实例是否为空,为空则创建一个实例

     1 public class Singleton2 {
     2     //1.私有化构造方法
     3     private Singleton2(){
     4 
     5     }
     6     //2.声明类的唯一实例化对象,使用private static修饰
     7     private static Singleton2 instance;
     8 
     9     //3.提供一个获取实例对象的方法,用public static修饰
    10     public static Singleton2 getInstance(){
    11         //需要判断实例是否为空,为空则创建一个实例,否则返回实例
    12         if (instance == null) {
    13             instance = new Singleton2();
    14         }
    15         return instance;
    16     }
    17 }

    3.2测试懒汉模式

       使用main方法测试,测试中调用2次getInstance(),比较2次的对象是否相等。

    1 public class Test {
    2     public static void main(String[] args){
    3         //调用singleton2的静态实例
    4         Singleton2 s3 = Singleton2.getInstance();
    5         Singleton2 s4 = Singleton2.getInstance();
    6         System.out.println(s3==s4); //相等,为懒汉单例模式
    7     }
    8 }

    4.区别

      1.饿汉模式,只要类加载了就会创建一个唯一的实例,而懒汉模式只是在类中声明一个唯一的对象实例,只有在第一次调用 getIntance() 方法时才会创建一个实例,后面再调用就就不会再创建实例了。

      2.饿汉模式的特点是加载类时比较慢,但是运行时获取对象的速度比较快,并且线程安全。

      3.懒汉模式的特点是加载类时比较快,但是运行时获取对象的速度比较慢,并且线程不安全。

  • 相关阅读:
    无法往u盘里边复制超过4G的单个文件解决方法
    vue 自定义属性判断点击每个item 显示隐藏
    前端小组分享会之异步回调函数中的上下文
    git 的一些命令
    ES学习之promise
    mac找到占用端口号的进程ID
    meta link
    webpack学习笔记--安装
    css样式之 direction
    日常积累之JSON.stringify和JSON.parse substr
  • 原文地址:https://www.cnblogs.com/zt19994/p/8127798.html
Copyright © 2011-2022 走看看