• 设计模式--单例模式


    设计模式--单例模式

    1、单例模式
      保证一个类仅有一个实例,并提供一个访问它的全局访问点

    2、单例模式的结构

    • 角色

        单例类(Singleton):只可以创建出一个实例

    • 类图:

        

    3、单例模式举例
    Singleton.java

    package com.nick.pattern.singleton;
    /**
    * 饿汉式单例模式
    * @author nick
    */
    public class Singleton {
      //JVM加载Singleton时就创建instance对象
      
    private static Singleton instance = new Singleton();   private Singleton(){     //设置构造方法的权限为private   }
      
    public static Singleton getInstance() {     return instance; //为外部类提供获得instance对象的方法
      
    } public void say(){     System.out.println("单例模式1");  }
    }

    Singleton2.java

    package com.nick.pattern.singleton;
    /**
    * 懒汉式单例模式
    * @author nick
    */
    public class Singleton2 {
      private static Singleton2 instance; //唯一的对象
    
      private Singleton2(){
        //构造方法设置为private权限
      }
    
      public static synchronized Singleton2 getInstance(){ //同步方法,避免多线程的问题
        if(instance == null){ 
          instance = new Singleton2();//只有对象对存在的时候,才会创建对象(懒汉式)
        }
        return instance;
      }
    
      public void say(){
        System.out.println("单例模式2");
      }
    }

    Application.java

    package com.nick.pattern.singleton;
    /**
    * 主程序
    */
    public class Application {
      public static void main(String[] args) {
        //Singleton s = new Singleton(); //error,不能创建新的对象
        Singleton s1 = Singleton.getInstance(); //只能把单例模式中创建好的对象赋值给s
        s1.say();
        Singleton2 s2 = Singleton2.getInstance();
        s2.say();
      }
    }

    运行结果:

      

    4、单例模式的优缺点
      优点:单例类的唯一实例由单例类本身来控制,所以可以很好的控制用户何时访问它。

  • 相关阅读:
    网络协议研究的工具-NS3
    指数ETF基金的组合分析方法初探
    小结量化投资之路(2013年写的旧帖再加工)
    金融计算的开源库——QuantLib 学习入门
    如何系统学习网络技术
    学好编程的几个方面
    C++的学习思路(总结以备忘)
    Think in SAS
    springSecurity + OAuth2 获取Token流程分析以及增加协议授权模式
    Redis主从复制、哨兵、Cluster三种模式
  • 原文地址:https://www.cnblogs.com/sinlearn/p/11881430.html
Copyright © 2020-2023  润新知