zoukankan      html  css  js  c++  java
  • 单例模式

    什么是设计模式

    • 一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。简单理解:特定问题的固定解决方法。
    • 好处:使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性、重用性。

    单例模式

    • 单例(Singleton):只允许创建一个该类的对象。

    饿汉式

    • 类加载的时候创建,天生线程安全。
    • 优点:线程安全
    • 缺点:生命周期太长,浪费空间
    package com.kingtl.SingleDemo;
    
    /**
     * 饿汉式单例
     * 1、创建一个常量
     * 2、构造方法私有化,类外部不能创建对象
     * 3、通过一个公开方法,来返回这个对象
     */
    public class SingleTon {
        private static final SingleTon instance = new SingleTon();
        private SingleTon() {}
        public static SingleTon getInstance() {
            return instance;
        }
    }
    

    测试:

    package com.kingtl.SingleDemo;
    
    public class TestSingleTon {
        public static void main(String[] args) {
            for (int i = 0; i < 3; i++) {
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        System.out.println(SingleTon.getInstance().hashCode());
                    }
                }).start();
            }
        }
    }
    

    懒汉式

    • 使用时创建,线程不安全,加同步(可加1、同步方法(在方法上加上synchronized),或者2、同步代码块 ,为了执行效率,如果有一个线程执行过,就无需其他线程进入同步代码块)
    • 优点:生命周期短,节省空间
    • 缺点:有线程安全问题
    package com.kingtl.SingleDemo;
    
    /**
     * 懒汉式单例
     * 1、创建一个对象,赋值为 null
     * 2、构造方法私有化,类外部不能创建对象
     * 3、通过一个公开方法,来返回这个对象
     */
    public class SingleTon2 {
        // 创建对象
        private static SingleTon2 instance = null;
        // 私有化构造方法
        private SingleTon2() {}
        // 创建一个静态方法
        public static SingleTon2 getInstance() {
            if (instance == null) {  // 提高执行效率
                synchronized (SingleTon2.class) {
                    if (instance == null) {
                        instance = new SingleTon2();
                    }
                }
            }
            return instance;
        }
    }
    
    

    懒汉式-静态内部类写法

    package com.kingtl.SingleDemo;
    
    /**
     * 静态内部类写法
     */
    public class SingleTon3 {
        private SingleTon3() {}
        private static class Holder {
            static SingleTon3 instance = new SingleTon3();
        }
        public static SingleTon3 getInstance(){
            return Holder.instance;
        }
    }
    
    
  • 相关阅读:
    学习资料
    InstallShield常用工具
    InstallShield中调用API
    系统目录
    abort和exit
    Uninstall Registry Key
    GDI+资料
    VBScript是什么?有什么优缺点?
    DrawImage调查
    KEIL MDK环境下uCOSII在LPC17xx上的移植实例 Chung
  • 原文地址:https://www.cnblogs.com/KingTL/p/13521178.html
Copyright © 2011-2022 走看看