JavaSE——设计模式—单例设计模式

 
饿汉设计模式是在一开始就用static final修饰并且随着类加载就已经创建出的对象,是天生线程安全,但是存在对象未被使用的情况造成内存浪费。
懒汉设计模式是线程不安全的,需要通过synchronized关键字来进行线程安全处理。

package com.zhao.singleinstance;

public class SingleInstance1 {
    //单利设计模式
    //饿汉式——提前创建好一个该类的对象
    //static修饰的随着类的加载而加载,final字符修饰的不可改变
    //当测试类中加载该类时已经提前创建好了一个对象供其使用
    private static final SingleInstance1 instance=new SingleInstance1();

    //提供一个拿到单例的入口
    public static SingleInstance1 getInstance(){
        return instance;
    }

    //构造器
    //必须私有化
    private SingleInstance1(){

    }
}
package com.zhao.singleinstance;

public class Test1 {
    public static void main(String[] args) {
        SingleInstance1 s1=SingleInstance1.getInstance();
        SingleInstance1 s2=SingleInstance1.getInstance();

        System.out.println(s1==s2);
        //结果是true,说明两个地址拿到的是同一个对象,是单例对象
    }
}
package com.zhao.singleinstance;

public class SingleInstance2 {
    //单利设计模式
    //懒汉式——不提前创建好对象,要的时候再给

    //定义一个静态变量,用于存储一个对象即可
    //因为是static修饰的,所以随着类的加载只会加载一次
    private static SingleInstance2 instance;

    //写一个静态方法,在当前没有已存在的该单例时,对外返回一个单例对象
    public static SingleInstance2 getInstance(){
        if (instance==null){
          //此时说明是第一次来拿这个对象,那么就创建一个对象,并返回
            SingleInstance2 instance=new SingleInstance2();
        }
        return instance;
    }

    //首先必须构造器私有化
    private SingleInstance2(){

    }
}
package com.zhao.singleinstance;

public class Test2 {
    public static void main(String[] args) {
        SingleInstance2 s1=SingleInstance2.getInstance();
        SingleInstance2 s2=SingleInstance2.getInstance();
        System.out.println(s1==s2);
        //结果是true,说明两个地址拿到的是同一个对象,是单例对象
    }
}
posted @ 2023-03-07 02:41  SuzukiHane  阅读(14)  评论(0)    收藏  举报