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

    package com.lkr.dataStructure.designPatterns;

    import java.util.HashMap;
    import java.util.Map;

    /*
    单例模式,是java中最简单的设计模式之一,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
    这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建。
    这个类提供了一种访问唯一的对象的方式,可以直接访问,不需要实例化该类的对象。
    1。单例类只能有一个实例
    2。单例类必须自己创建自己的唯一实例
    3。单例类必须给所有其他对象提供这一实例
    */
    //饿汉模式
    public class SingletonTest {
    private static SingletonTest instance = new SingletonTest();
    private SingletonTest(){

    }
    private static SingletonTest getInstance(){
    return instance;
    }
    }

    //懒汉模式(线程不安全)
    public class Singleton2{
    private static Singleton2 instance;
    private Singleton2(){
    }
    public Singleton2 getInstance(){
    if(null == instance){
    instance = new Singleton2();
    }
    return instance;
    }
    }

    //懒汉模式(线程安全)
    public class Singleton3{
    private static Singleton3 instance;
    private Singleton3(){

    }
    public static synchronized Singleton3 getInstance(){
    if(null == instance){
    instance = new Singleton3();
    }
    return instance;
    }
    }

    //双重检查模式(dcl)
    //推荐用
    public class Singleton4{
    private static volatile Singleton4 instance;
    private Singleton4(){

    }
    public static Singleton4 getInstance(){
    if(null == instance){}
    synchronized (Singleton4.class){
    if(null == instance){
    instance = new Singleton4();
    }
    }
    return instance;

    }
    }

    //静态内部类单例模式
    //推荐用
    public class Singleton5{
    private Singleton5(){

    }
    public static Singleton5 getInstance(){
    return SingletonHolder.INSTANCE;
    }
    public static class SingletonHolder{
    private static final Singleton5 INSTANCE = new Singleton5();
    }
    }

    //枚举单例
    //默认枚举实例的创建是线程安全的,并且在任何情况下都是单例
    public enum Singleton6{
    INSTANCE;
    public void doSomething(){

    }
    }

    //使用容器实现单例模式
    public class SingletonManager{
    private static Map<String,Object> objMap = new HashMap<String, Object>();
    private SingletonManager(){

    }
    public static void registerService(String key,Object instance){
    if(!objMap.containsKey(key)){
    objMap.put(key,instance);
    }
    }
    public static Object getService(String key){
    return objMap.get(key);
    }
    }
































  • 相关阅读:
    个人博客设计:创建Sql数据库操作类。
    文件 md5 查看 命令
    https 理解
    ie8、9 post 跨域
    tomcat https
    wamp 初始化 修改mysql密码
    面试-Android之java基础
    apktool.bat
    面试------Android 版本之前的差异(常见,欢迎补充)。
    ubuntu kylin 设置 wifi
  • 原文地址:https://www.cnblogs.com/turningli/p/10398021.html
Copyright © 2011-2022 走看看