我是靠谱客的博主 柔弱服饰,最近开发中收集的这篇文章主要介绍Java中的单例设计模式(含模式演示)一、单例设计模式二、设计模式类型演示三、总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

一、单例设计模式

1、设计模式:

是很多程序员根据经验编写的代码模板。

2、单例设计模式:

某个类的对象在整个应用程序中只有唯一的一个。

3、设计模式的分类:

(1)饿汉式:

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

(2)懒汉式:

当需要某个类的对象时,再进行创建


二、设计模式类型演示

(一)饿汉式类型一

1、类的创建

/*
2022.7.30
饿汉式一
*/
class One {
    //构造器私有化
    private One() {
    }
    //创建一个One类的对象
    public static final One INSTNCE = new One();
}

2、类的测试

使用到了一个单元测试工具junit@Test:表示使用该测试工具的注解。

import org.junit.Test;
public class TestSingle {
    @Test
    public void test1() {
        One o1 = One.INSTNCE;
        One o2 = One.INSTNCE;
        System.out.println(o1 == o2);
    }

}

3、测试结果

结论:“==”测试的对象的内存地址是相同的 ,所以该类只创建了一个对象。


(二)饿汉式类型二

1、类的创建:

//饿汉式二(采用枚举类型)
enum Two {
    INSTNCE;
}

2、类的测试:

import org.junit.Test;
public class TestSingle {
    @Test
    public void test2() {
        Two o1 = Two.INSTNCE;
        Two o2 = Two.INSTNCE;
        System.out.println(o1 == o2);
    }

}

3、测试结果:

测试结果同上 


(三)饿汉式类型三

1、类的创建:

//饿汉式三
class Three {
    //构造器私有化
    private Three() {
    }
    //创建该类的一个私有的对象(静态的)
    private static Three instance = new Three();
    //返回创建的对象(声明为静态)
    public static Three getInstance() {
        return instance;
    }
}

2、类的测试:

import org.junit.Test;
public class TestSingle {
    @Test
    public void test3() {
        Three o1 = Three.getInstance();
        Three o2 = Three.getInstance();
        System.out.println(o1 == o2);
    }

}

3、测试结果:

 测试结果同上 


(四)懒汉式类型一

1、类的创建:

//懒汉式一
class Four {
    //构造器私有化
    private Four() {
    }

    //声明一个该类的对象(声明为静态的),但此时还不创建
    private static Four instance;

    //创建对象并返回该类对象
    public static synchronized Four getInstance() {
        //判断一下主程序是否为instance已创建了对象
        //判断对象是否为空、创建对象。有多条指令,存在线程不安全问题,需要加锁(可对方法进行加锁)
        if (instance == null) {
            //创建对象
            instance = new Four();
        }
        return instance;
    }
}

2、类的测试:

import org.junit.Test;
public class TestSingle {
    //声明Four类的对象
    Four o1;
    Four o2;

    @Test
    public void test4() {

        //使用匿名内部类创建线程对象
        Thread t = new Thread("o1") {
            //重写方法
            @Override
            public void run() {
                o1 = Four.getInstance();
            }
        };
        //启动线程
        t.start();
        Thread t1 = new Thread("o1") {
            //重写方法
            @Override
            public void run() {
                o2 = Four.getInstance();
            }
        };
        t1.start();
        //线程加塞,使上面两个线程获取到Four类的对象
        try {
            t.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        try {
            t1.join();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
        System.out.println("o1=" + o1);
        System.out.println("o2=" + o2);
        System.out.println(o1 == o2);
    }
}

3、测试结果:

  测试结果同上 


(五)懒汉式类型二

1、类的创建:

//懒汉式二
class Five {
    //构造器私有化
    private Five() {
    }

    //创建一个静态内部类
    private static class Inner {
        //在内部类中创建外部类的对象(声明为静态的)
        static Five instance = new Five();
    }

    //返回外部类的对象(声明为静态的,调用时可直接使用“类名.静态方法名”)
    public static Five getInstance() {
        return Inner.instance;
    }
}

2、类的测试:

import org.junit.Test;

public class TestSingle {
    @Test
    public void test5() {
        Five o1 = Five.getInstance();
        Five o2 = Five.getInstance();
        System.out.println(o1 == o2);
    }

}

3、测试结果:

测试结果同上 


三、总结

实现单例的方式:

(1)构造器私有化。

(2)在类的内部创建好该类的唯一对象。

最后

以上就是柔弱服饰为你收集整理的Java中的单例设计模式(含模式演示)一、单例设计模式二、设计模式类型演示三、总结的全部内容,希望文章能够帮你解决Java中的单例设计模式(含模式演示)一、单例设计模式二、设计模式类型演示三、总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(31)

评论列表共有 0 条评论

立即
投稿
返回
顶部