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

    1.什么是单例模式

    确保某一个类在整个项目中只有一个实例,并且自行创建实例化对象,并向整个系统提供这个实例。
    

    2.单例模式通用类图

    1.单例模式通过将构造函数设置为私有,来限制外部实例话对象。
    2.提供一个getInstanse接口返回内部创建的实例对象。
    

    类图如下:

    3.单例模式的几种实现方法

    方法一:饿汉模式

    单例模式实现方式有多种,其中比较简单的实现方式是直接定义一个private的属性,并直接初始化。相关实现如下:

    public class SingletonPattern {
    
        private static final SingletonPattern singletonPattern = new SingletonPattern();
    
        private SingletonPattern(){
    
        }
    
        public static SingletonPattern getInstance(){
            return singletonPattern;
        }
    }
    

    这种方法被称为饿汉模式,即不管有没有地方需要获取实例对象,都在类加载的时候直接实例话对象出来。此中方式类加载比较慢,但是获取实例对象比较快。

    方法二:懒汉模式

    另外一种实现方式被称为懒汉模式,即在第一次调用getInstance方法的时候才会创建实例话对象。实现方式如下:

    public class SingletonPattern2 {
    
        private static SingletonPattern2 singletonPattern = null;
    
        private SingletonPattern2(){
    
        }
    
        public static SingletonPattern2 getInstance(){
            if (singletonPattern == null) {
                singletonPattern = new SingletonPattern2();
            }
            
            return singletonPattern;
        }
    }
    

    此种实现方式会有线程安全问题,即在getInstance中做了先检查再操作,下面是对此问题的一种解决方案:

    public class SingletonPattern2 {
    
        private static SingletonPattern2 singletonPattern = null;
    
        private SingletonPattern2() {
    
        }
    
        public static synchronized SingletonPattern2 getInstance() {
            if (singletonPattern == null) {
                singletonPattern = new SingletonPattern2();
            }
            
            return singletonPattern;
        }
    }
    

    此种解决方式是在getInstance方法加了同步操作。

  • 相关阅读:
    PHP 进制汉字转化
    当调用方法没有注释信息并且参数不全
    DBCP数据库连接池技术的两种实现方式
    汇编语言中一步执行循环
    求最小函数依赖集
    汇编语言实验四
    汇编语言第七章
    batch实现数据库的批量插入Unknown system variable 'query_cache_size'
    汇编语言第一节课:数制转换,真值和补码
    Forsaken喜欢数论
  • 原文地址:https://www.cnblogs.com/vitasyuan/p/9535727.html
Copyright © 2011-2022 走看看