• 单例模式(饿汉式和懒汉式)----目的:保证这个类只创建一个对象


    饿汉式和懒汉式区别:

    饿汉式一开始就创建一个对象,勤快,但是如果用不到创建的对象,对象就是多余的

    懒汉式不用就不创建对象,因为懒得吃屎*.*

    package day12;

    /*
    * 单例模式(饿汉式):
    * 1.构造方法私有化,使用private修饰构造方法
    * 2.定义一个当前类型的静态变量,并创建对象
    * 3.提供公共的获取当前类示例的静态方法
    * 缺点:因为在类加载之后对象就创建好了,
    * 倘若在别的地方没有用到这个对象的话,这个对象就是多余的
    */
    public class Singleton01 {
    // 定义一个当前类型的静态变量,并创建对象
    private static Singleton01 instance = new Singleton01();

    // 构造方法私有化,使用private修饰构造方法,保证当前类在外部无法直接常见该类的对象
    private Singleton01() {
    }

    // 提供公共的获取当前示例的静态方法
    public static Singleton01 getInstance() {
    return instance;
    }
    }

    ---------------------懒汉式-------------------------------

    如果懒汉式的条件变为实例化

     相当于创建了一个局部变量
    没有给成员变量的instance赋值

    f(instance==null){
    Singleton02 instance=new Singleton02();
    System.out.println("我走了");
    }

    *************************************

    package day12;

    /*单例模式:(懒汉式)
    * 1.构造方法私有化
    * 2.定义一个用来存放单例对象的静态变量
    * 3.提供公共的获取当前类示例的静态方法
    * 当前懒汉式的写法是有线程安全问题的
    */
    public class Singleton02 {
    // 定义一个用来存放单例对象的静态变量
    private static Singleton02 instance;

    // 构造方法私有化
    private Singleton02() {
    }

    // 提供公共的获取当前类示例的静态方法
    public static Singleton02 getInstance() {
    // 判断当前静态变量是否为null
    if (instance == null) {
    instance = new Singleton02();
    }
    return instance;
    }
    }

    ----------------饿汉式和懒汉式测试结果-----------------------

    package day12;

    public class Test01 {
    public static void main(String[] args) {
    // ----------饿汉式------------
    Singleton01 aSingleton01 = Singleton01.getInstance();
    System.out.println(aSingleton01);
    Singleton01 b = Singleton01.getInstance();
    System.out.println(b);
    Singleton01 cSingleton01 = Singleton01.getInstance();
    System.out.println(cSingleton01);

    // ---------懒汉式--------------
    Singleton02 aSingleton02 = Singleton02.getInstance();
    System.out.println(aSingleton02);
    Singleton02 bSingleton02 = Singleton02.getInstance();
    System.out.println(bSingleton02);
    Singleton02 cSingleton02 = Singleton02.getInstance();
    System.out.println(cSingleton02);

    }

    }

    ---------------饿汉式和懒汉式输出结果--------------------

    day12.Singleton01@15db9742
    day12.Singleton01@15db9742
    day12.Singleton01@15db9742
    day12.Singleton02@6d06d69c
    day12.Singleton02@6d06d69c
    day12.Singleton02@6d06d69c

    -----------------------单列模式的案例:Runtime-------------------------------------

    package day12;

    import java.io.IOException;

    /*
    * 单列模式的案例:Runtime
    */
    public class Test02 {
    public static void main(String[] args) throws IOException {
    Runtime runtime = Runtime.getRuntime();
    // runtime.exec("mspaint");
    // runtime.exec("notepad");
    runtime.exec("calc");

    }
    }

  • 相关阅读:
    java读取ldif文件并创建新的节点
    AngularJS的基本概念和用法
    前端开发环境需要的工具
    解决:使用ajax验证登录信息返回前端页面时,当前整个页面刷新。
    js中switch语句不执行
    使用html5中required属性
    H-ui.admin v3.1学习之路(一):导航栏信息无法在内容区显示
    解决:@Auarowired为null
    scrapy框架整理
    django项目的部署
  • 原文地址:https://www.cnblogs.com/Koma-vv/p/9511862.html
Copyright © 2020-2023  润新知