zoukankan      html  css  js  c++  java
  • 设计模式之单例模式

        使用场景:

        在软件开发中,软件开发人员希望一些服务类且仅有一个实例供其他程序使用。如:打印机服务程序或对于系统配环境的一些控制,为了避免并发访问造成的不一致问题,希望仅为其他程序提供一个实例;又如,要生成唯一序列号的环境或创建一个对象需要消耗的资源过多(要访问IO和数据库等资源)。

        对于整个系统使用的对象可以使用一个全局变量,在正确编写程序的情况下也可以保证唯一的一个实例,但如果系统随之不断扩张,就无法保证系统中有且只有一个实例。

    单例模式的类图:

    单例模式是一个比较简单的设计模式,其本质上就是自行实例化并始终向系统提供某个类的唯一实例。

     

    单例模式实现代码:

    懒汉模式:

    public class Singleton{
    private static Singleton singleton=null;
    
    private Singleton(){
    }
    
    public static Singleton getSingleton(){
    if(singleton=null)
    {
    singleton=new Singleton();
    }
    return singleton;
    }
    }

    该模式在多线程并发模式下是线程不安全的,所有以防高并发时出现问题,可以在getSingleton方法前加上synchronized关键字,当然也可以在getSingleton方法内加上synchronized关键字,这是针对java来说,如果用.net则要用lock锁来实现线程安全。

    饿汉模式:

    public class Singleton{
    private static final Singleton singleton=new Singleton();
    
    private Singleton(){
    }
    
    public static Singleton getSingleton(){
    return singleton;
    }
    }
  • 相关阅读:
    vue插件编写与开发
    http状态码解读
    JavaScript 在HTML中的加载顺序
    vue props的理解
    vue项目中使用scss
    [LeetCode] 57. 插入区间
    [LeetCode] 55. 跳跃游戏
    [LeetCode] 56. 合并区间
    [LeetCode] 54. 螺旋矩阵
    [LeetCode] 53. 最大子序和
  • 原文地址:https://www.cnblogs.com/sumuncle/p/4347940.html
Copyright © 2011-2022 走看看