• 设计模式--单例模式


    设计模式--单例模式

    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、单例模式的优缺点
      优点:单例类的唯一实例由单例类本身来控制,所以可以很好的控制用户何时访问它。

  • 相关阅读:
    根据pandas和matplotlib制作简单的图表
    python-pandas 描述和汇总统计表
    linux json的使用
    zend studio10.5 + apache2.2 + php5.2.8 + xdebug2.3
    form表单中name和id区别
    浏览器中访问php页面没法正常显示
    zend studio
    ajax调试 No 'Access-Control-Allow-Origin' header is present on the requested resource
    火狐下input密码框自动填充值和php传数组给js的问题
    mysql 联合 count
  • 原文地址:https://www.cnblogs.com/sinlearn/p/11881430.html
Copyright © 2020-2023  润新知