zoukankan      html  css  js  c++  java
  • 单例模式- 实现方式

    单例模式是基础设计模式之一

    单例模式定义:

    单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。总之,选择单例模式就是为了避免不一致状态,避免政出多头。

    单例模式特点:

    1、单例类只能有一个实例。

    2、单例类必须自己创建自己的唯一实例。

    3、单例类必须给所有其他对象提供这一实例。

    单例模式:分饱汉式单例和饿汉式单例

    饱汉式单例

    public class  enumTest {
    private final static enumTest enumTest = new enumTest();
    private enumTest(){}

    /**
    * 饿汉式,类加载完成实例化,避免线程同步
    * @return
    */
    public static enumTest getInstance(){
    return enumTest;
    }
    }



    饿汉式单例:
    public class Test {
    private static Test test;
    private Test(){ }

    /**
    * 懒汉式 线程不安全(只能单线程使用,多线程,一个线程进入判断语句块,未来得及往下执行,另一线程也通过此判断语句,产生多个实例)
    *
    * @return
    */
    public static Test getInstance(){
    if(test == null) {
    test = new Test();
    }
    return test;

    }


    /**
    * 线程安全 懒汉式
    * 缺点:效率低 每个线程在想获得类的实例时候,执行此方法 都要进行同步
    * @return
    */
    public static synchronized Test getInstance1(){
    if(test == null){
    test = new Test();
    }
    return test;
    }



    /**
    * 双重检查 懒汉式(推荐使用)
    * 优点:线程安全,延迟加载,效率较高
    * @return
    */
    public static Test getInstance2(){
    if(test == null){
    synchronized(Test.class){
    if(test ==null){
    test = new Test();
    }
    }
    test = new Test();
    }
    return test;
    }
    }

    综上所述,推荐使用双重检查懒汉式单例模式 或 饱汉式单例模式(其实对内存的影响可以忽略不计)

  • 相关阅读:
    hdu 2485 Destroying the bus stations 迭代加深搜索
    hdu 2487 Ugly Windows 模拟
    hdu 2492 Ping pong 线段树
    hdu 1059 Dividing 多重背包
    hdu 3315 My Brute 费用流,费用最小且代价最小
    第四天 下载网络图片显示
    第三天 单元测试和数据库操作
    第二天 布局文件
    第一天 安卓简介
    Android 获取存储空间
  • 原文地址:https://www.cnblogs.com/zhangxiya/p/15394317.html
Copyright © 2011-2022 走看看