• 基础设计模式


    一、单例模式


     

    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;
        }
    }

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

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

  • 相关阅读:
    ScriptManager在客户端来调用服务器端方法或者webService的方法
    转2010 .NET面试题整理之基础篇
    .net 面试题1
    读写文件
    三种编解码方式
    vs2008快捷键
    SharePoint类库说明.NET教程,Asp.Net研发
    一道sql面试题解法
    16天学完java
    总结DataTable 导出Excel数据
  • 原文地址:https://www.cnblogs.com/anyanpeng/p/15038052.html
Copyright © 2020-2023  润新知