zoukankan      html  css  js  c++  java
  • 基础设计模式

    一、单例模式


     

    1.1单例模式的八种方式

    1)饿汉式(静态常量)

    2)饿汉式(静态代码块)

    3)懒汉式(线程不安全)

    4)懒汉式 (线程安全,同步方法)

    5)懒汉式(线程安全,同步代码块)

    6)双重检查

    7)静态内部类

    8)枚举

    1.1.1 饿汉式(静态常量)

    饿汉式的创建是这样的,先给一个私有的构造方法,目的是不能在其他类中创建该对象

    在类初始化的时候就创建对象

    提供对外调用的方法

    public class Singledemo {
    
        public static void main(String[] args) {
            //获取实例
            Singledemo singleInstance = Singledemo.getSingleInstance();
        }
    
        //提供私有的构造方法
        private Singledemo() {
            System.out.println("创建了一个单例实例");
        }
    
        //在类初始化的时候就创建对象
        private static Singledemo singleInstance = new Singledemo();
    
        //提供对外的调用方法
    
        public static Singledemo getSingleInstance(){
            return singleInstance;
        }
    }
    

     总结:该方式比较简单,在类装载的时候就完成了实例化,避免了多线程同步问题

     缺点: 在类装载的时候就实例化,如果一直没有用这个类的话,就造成了内存的浪费

    1.1.2 饿汉式(静态代码块)

    public class Singledemo2 {
    
        //私有化构造方法
        private Singledemo2(){
    
        }
    
        //定义私有的静态变量
        private static Singledemo2 singledemo2;
    
        //静态代码块中创建对象
        static {
            singledemo2=new Singledemo2();
        }
        //提供公有的方法获取实例
        public Singledemo2 getSingledemo2(){
            return singledemo2;
        }
    }
    

     1.1.3懒汉式(线程不安全)

    创建方式是这样的:

    给一个私有的构造方法,使不能新建这个类

    定义一个静态变量,先不创建对象

    定义一个公有的方法,用来获取实例,在方法中判断实例是否为null,为null的时候new一个新的对象

    public class SingleDemo3 {
        public static void main(String[] args) {
            SingleDemo3 singleDemo3 = SingleDemo3.getSingleDemo3();
        }
        //提供私有的静态方法
        private SingleDemo3(){
            System.out.println("等调用方法的时候,我创建了一个实例");
        }
        //提供静态变量
        private static SingleDemo3 singleDemo3;
    
        //提供共有的获取实例的方法
        public static SingleDemo3 getSingleDemo3(){
            if (singleDemo3==null){
                singleDemo3=new SingleDemo3();
            }
            return singleDemo3;
        }
    }

    优点:在使用的时候创建对象,避免了内存浪费的危险

    缺点:这种创建方法线程不安全

  • 相关阅读:
    小波变换的引入,通俗易懂
    Leetcode 437. Path Sum III
    Leetcode 113. Path Sum II
    Leetcode 112 Path Sum
    Leetcode 520 Detect Capital
    Leetcode 443 String Compression
    Leetcode 38 Count and Say
    python中的生成器(generator)总结
    python的random模块及加权随机算法的python实现
    leetcode 24. Swap Nodes in Pairs(链表)
  • 原文地址:https://www.cnblogs.com/anyanpeng/p/15038052.html
Copyright © 2011-2022 走看看