设计模式-----单例设计模式

打印 上一主题 下一主题

主题 844|帖子 844|积分 2532

设计模式



  • https://www.runoob.com/ 这上面有很多东西很好。
  • 设计模式(Design pattern)代表了最佳的实践,通常被有履历的面向对象的软件开发职员所采用。设计模式是软件开发职员在软件开发过程中面临的一般题目标解决方案。这些解决方案是众多软件开发职员颠末相当长的一段时间的试验和错误总结出来的。
  • 就是很多个总结了履历,写出了一套优秀的代码。可以在很多地方实现低耦合、高内聚。代码移植性高,可重用性强的。
1、单例设计模式



  • 在整个应用体系中,只有一个实例对象

    • 优点:节省内存,可以复用
    • 缺点:有线程安全题目

2、实现方式



  • 懒汉式:线程不安全的
  • 懒汉式:线程安全【双重校验锁】
  • 饿汉式:天生线程安全的
2.1 懒汉式



  • 实现步调

    • 创建一个类

      • 构造器私有
      • 创建一个私有的静态的实例对象,不用赋值
      • 创建一个公有的静态的返回实例对象的方法


  • 详细实现

    • 线程非安全的
    1. package com.sw.java2024.pojo;
    2. /**
    3. * 懒汉式
    4. *  有线程安全问题
    5. **/
    6. public class Singleton01 {
    7.     //- 构造器私有
    8.     private Singleton01(){}
    9.     //- 创建一个私有的静态的实例引用,不用赋值
    10.     private static Singleton01 singleton = null;
    11.     //- 创建一个公有的静态的返回实例对象的方法
    12.     public static Singleton01 getInstance(){
    13.         if(singleton == null) {
    14.             singleton = new Singleton01();
    15.         }
    16.         return singleton;
    17.     }
    18. }
    复制代码
      

    • 线程安全【双重校验锁】
    1. package com.sw.java2024.pojo;
    2. /**
    3. * 懒汉式
    4. *  解决线程安全问题
    5. **/
    6. public class Singleton02 {
    7.     //- 构造器私有
    8.     private Singleton02(){}
    9.     //- 创建一个私有的静态的实例引用,不用赋值
    10.     //volatile : 能够禁止指令重排
    11.     private static volatile Singleton02 singleton = null;
    12.     //- 创建一个公有的静态的返回实例对象的方法
    13.     //双重校验锁:OK,禁止指令重排
    14.     public static Singleton02 getInstance(){
    15.         if (singleton == null) {
    16.             synchronized (Singleton02.class) {
    17.                 if(singleton == null) {
    18.                     singleton = new Singleton02();
    19.                 }
    20.             }
    21.         }
    22.         return singleton;
    23.     }
    24. }
    复制代码

2.2 饿汉式



  • 优点:线程安全
  • 缺点:会造成一定内存浪费
  • 实现步调

    • 创建一个类

      • 构造器私有
      • 创建一个私有的静态的实例对象,直接赋值
      • 创建一个公有的静态的返回实例对象的方法


  1. package com.sw.java2024.pojo;
  2. /**
  3. * 饿汉式
  4. *  线程安全
  5. **/
  6. public class Singleton03 {
  7.     //- 构造器私有
  8.     private Singleton03(){}
  9.     //- 创建一个私有的静态的实例引用,直接赋值
  10.     private static Singleton03 singleton = new Singleton03();
  11.     //- 创建一个公有的静态的返回实例对象的方法
  12.     public static Singleton03 getInstance(){
  13.         return singleton;
  14.     }
  15. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

圆咕噜咕噜

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表