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

    什么是单例设计模式:

      单例设计模式是一种可以让该类只创建一个公共的对象的设计模式,可以避免多线程情况下每个对象创建一个对象导致的内存问题;

    为什么使用单例设计模式:

      节约内存,操作方便!

    怎么使用单例设计模式:

      1、私有化构造函数,让其他类在调用本类是无法直接创建对象。

      2、自主创建一个私有静态引用,指向本类对象

      3、创建一个公共的方法,用于对外返回本类创建的对象

    分类:

      1、饿汉单例设计模式(加载类的时候就已经创建了对象)

        优缺点:使用简单,避免了线程同步问题,但如果从始至终从未使用过这个实例,则会造成内存的浪费。

      2、懒汉单例设计模式(在真正调用的时候去创建对象)

        优缺点:只有被引用才会创建对象,不存在资源浪费的情况,但存在线程安全问题,在多线程的时候会出现问题(不推荐使用)

    实例:

      饿汉单例设计模式:

     1 public class Single {
     2     //当有成员变量的时候一般不用单例模式吧???
     3     //步骤1:私有化构造函数
     4     private  Single(){
     5     }
     6     //步骤2 创建一个s,指向Single()
     7     private static Single s =new Single();
     8     //步骤3:创建一个公共访问的静态方法,返回创建的对象
     9     public  static Single  getInstance(){
    10         return s;
    11     }
    12   //原来的方法
    13     public void Test(){
    14         System.out.println("调用了饿汉单例设计模式!!");
    15     }
    16 }

      懒汉单例设计模式:

    public class Single2 {
        //懒汉设计模式
        //步骤1:私有化构造函数
        private Single2(){
        }
        //步骤2:定义一个私有静态的引用s1接收对象的实例
        private  static  Single2 s1 ;
    
        //步骤3:定义一个方法,实现对对象的返回
        public static Single2 getInstance(){
            if(s1 == null){            //做一个判断,如果s1没有指向对象,则给它指向本类对象
                s1 = new Single2();
            }
            return s1;
        }
        //本类原有方法
        public void test2(){
            System.out.println("调用了懒汉设计模式!!");
        }
    }

      调用方法都一样:

    public class Main {
        public static void main(String[] args){
        //调用饿汉设计模式类
            Single s = Single.getInstance();
            s.Test();
        //调用懒汉设计模式类
            Single2 s2 = Single2.getInstance();
            s2.test2();
        }
    }

    结果:

    调用了饿汉单例设计模式!!
    调用了懒汉设计模式!!
    
    Process finished with exit code 0

    应用场景:

      并不是所有的设计都是用单例设计模式,应该更具具体的需求去选择设计模式,盲目使用单例设计模式会造成其他问题:

    • 1.需要生成唯一序列的环境
    • 2.需要频繁实例化然后销毁的对象。
    • 3.创建对象时耗时过多或者耗资源过多,但又经常用到的对象。 
    • 4.方便资源相互通信的环境

      标红总结引用自博主:一指流砂~   深入理解设计模式(一):单例模式 

      

    —————————————————————————————————————————————————————————————————————————————————————————————————————————————— 保持学习的劲头
  • 相关阅读:
    网络编程之粘包问题
    网络编程初识和socket套接字
    面向对象三大特性
    面向对象进阶
    面向对象初接触
    常用模块(模块初步了解)
    异常处理
    Ubutu Chrome 出现adobe flash is out of date的解决方法
    cmder默认的命令提示符λ改成$
    css在盒子中垂直居中和固定居中
  • 原文地址:https://www.cnblogs.com/qkblogs/p/12672185.html
Copyright © 2011-2022 走看看