zoukankan      html  css  js  c++  java
  • 单例模式(懒汉式和饿汗式)

    Java中单例模式是一种常见的设计模式,单例模式的写法有好几种,这里主要介绍三种:懒汉式单例、饿汉式单例。
      单例模式有以下特点:
      1、单例类只能有一个实例。
      2、单例类必须自己创建自己的唯一实例。
      3、单例类必须给所有其他对象提供这一实例。

      现实举例:
      单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。
    单例模式   

      * 饿汗式:类一加载就创建   

       * 懒汉式:用的时候,才去创建对象

    * 单例模式
    * 如何保证类在内存中只有一个对象
    * 1.构造方法私有化
    * 2.在成员位置创建对象
    * 单例模式的思想(面试题)
    * 饿汉式(不会出问题)
    * 懒汉式(会出问题)
    * 1.懒加载(延时加载)
    * 2.线程安全问题
    * (1)。是否多线程环境 是
    * (2)。是否有共享数据 是
    * (3)。是否有多条语句操作共享数据 是

    饿汉式代码 (类一加载就创建 对象

    public class Student {
      //将本类私有化,防止外界直接实例化,提供一个静态的方法供外界访问
      private Student(){}

      //自己造一个 静态方法只执行一次 只能new一次
      private static Student stu= new Student();

      //提供一个静态的方法供外界访问
      public static Student getStudent(){
      return stu;
      }
    }

    public class Test {
    public static void main(String[] args) {
      Student s1 = Student.getStudent();
      Student s2 = Student.getStudent();
      System.out.println(s1==s2);
      }
    }

    懒汉式代码(用的时候,才去创建对象

    public class Teacher(){

      //将本类私有化,防止外界直接去实例化对象,然后提供一个静态的方供外界访问

      private Teacher(){}

      //对象默认为空  使用的时候再实例化

      private static Teacher tea = null;

      //同步的作用是 一个萝卜一个坑同步的作用是 一个萝卜一个坑,确保实例化的对象一一对应

      public synchronized static Teacher getTeacher(){

         if(tea == null){

          //实例化一个对象,防止空指针错误

          tea = new Teacher();

        }

      }

    }

    public class Test {
    public static void main(String[] args) {
      Teacher t1 = Teacher .getTeacher ();
      Teacher t2 = Teacher .getTeacher ();
      System.out.println(t1==t2);
      }
    }

     

      
  • 相关阅读:
    BZOJ 3205 [Apio2013]机器人 ——斯坦纳树
    BZOJ 3782 上学路线 ——动态规划 Lucas定理 中国剩余定理
    HDU 1423 Greatest Common Increasing Subsequence ——动态规划
    BZOJ 3309 DZY Loves Math ——莫比乌斯反演
    POJ 1038 Bugs Integrated, Inc. ——状压DP
    POJ 3693 Maximum repetition substring ——后缀数组
    POJ 2699 The Maximum Number of Strong Kings ——网络流
    POJ 2396 Budget ——有上下界的网络流
    BZOJ 4650 [Noi2016]优秀的拆分 ——后缀数组
    源码安装python
  • 原文地址:https://www.cnblogs.com/li1189/p/6573338.html
Copyright © 2011-2022 走看看