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

    单例模式

    定义:一个类只有一个实例,并提供全局访问这个实例的接口。
    用途:有一些类我们只需要一个对象实例,比如说:线程池、缓存、对话框、注册表、日志对象、充当打印机、显卡等设备驱动程序的对象。如果制造出多个实例就可能会导致一些问题的产生,比如:程序的行为异常、资源使用过量、或者不一致性的结果。

    单例模式实现

    • 实现特点:
      • 1 有一个私有的构造函数。
      • 2 有一个私有的静态变量,作为类的唯一实例对象。
      • 3 有一个公有的方法可以获得对象实例。
    • 单例模式的两种实现方式
      • 饿汉方式:指全局的单例实例在类装载时构建。
      • 懒汉方式:指全局的单例实例在第一次被使用时构建。

    饿汉方式示例(静态变量初始化时建的实例,所以保证了线程安全)

    //饿汉方式
    public class SingletonPattern {
    	private static SingletonPattern instance=new SingletonPattern();
    	private SingletonPattern() {}
    	public static SingletonPattern getInstance() {
    		return instance;
    	}
    }
    

    懒汉方式示例(加锁保证线程安全;双重检查+加锁保证只有第一次调用获得类的对象的方法getInstance时才同步,避免了之后调用getInstance的开销)

    //懒汉方式
    public class SingletonPattern {
    	private volatile static SingletonPattern instance;//volatile保证数据的可见性?
    	private SingletonPattern() {};
    	public SingletonPattern getInstance() {
    		if(instance==null) {
    			synchronized(SingletonPattern.class) {
    				if(instance==null) {
    					instance=new SingletonPattern();
    				}
    			}
    		}
    		return instance;
    	}
    }
    
  • 相关阅读:
    POJ 3292 Semi-prime H-numbers (素数筛法变形)
    POJ 1845 Sumdiv (整数拆分+等比快速求和)
    POJ 2635 The Embarrassed Cryptographer(大数求余)
    POJ 2115 C Looooops (扩展欧几里德 + 线性同余方程)
    poj3071
    poj2486
    poj1947
    POJ 1159
    POJ 1845
    poj3282
  • 原文地址:https://www.cnblogs.com/coding-gaga/p/11267095.html
Copyright © 2011-2022 走看看