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;
    }
    }
  • 相关阅读:
    HDU ACM 1392 Surround the Trees->凸包
    JMeter使用记录1 -- JDBC測试
    Html学习笔记4
    c++使用mysql的api连接相关问题
    [Angularjs]ng-select和ng-options
    mysql之字符串操作
    mysql之日期函数
    [sharepoint]Rest api相关知识(转)
    [工具类]泛型集合转换为DataTable
    C#修改文件或文件夹的权限,为指定用户、用户组添加完全控制权限
  • 原文地址:https://www.cnblogs.com/sumuncle/p/4347940.html
Copyright © 2011-2022 走看看