java设计模式: 单例设计模式

单例模式: 一个类只有一个实例对象, 如果一个类比较大频繁对类进行销毁和创建浪费性能, 如果类是可以复用的就可以使用单例模式。
1.线程安全。synchronized关键字。
2.是否懒加载。懒加载好处,假如对象在程序启动的时候就构建, 万一没有使用过就比较浪费性能了。
3.是否反射破坏。枚举类, 但是不能实现懒加载。

 

单例模式:

package com.ultiwill.test.designpattern;

/**
 * 单例设计模式
 *
 * @author chong.zuo
 * @date 2020/9/28 15:45
 */
public class LazySingletonTest {

    public static void main(String[] args) {
        LazySingleton instance1 = LazySingleton.getInstance();
        LazySingleton instance2 = LazySingleton.getInstance();
        System.out.println(instance1 == instance2);
    }

}

/**
 * 懒汉式
 * 当类被第一次调用时候就会创建类实例,
 */
class LazySingleton {

    /**
     * 本类内部创建对象实例
* volatile 阻止指令重排问题
*/ private volatile static LazySingleton lazySingleton; /** * 构造方法私有化,外部不能new */ private LazySingleton(){} /** * 提供一个公有的静态方法,返回实例对象 * @return */ public static LazySingleton getInstance() { if (lazySingleton == null) { synchronized (LazySingleton.class) { if (lazySingleton == null) { return lazySingleton = new LazySingleton(); } } } return lazySingleton; } } /** * 饿汉式 * 当类初始化时候就会创建类实例, * 不管你用不用,先创建出来,然后每次调用的时候,就不需要判断了,节省了运行时间。 */ class HungrySingleton { /** * 本类内部创建对象实例 */ private static HungrySingleton hungrySingleton = new HungrySingleton(); /** * 构造方法私有化,外部不能new */ private HungrySingleton(){} /** * 提供一个公有的静态方法,返回实例对象 * @return */ public static HungrySingleton getInstance() { return hungrySingleton; } }

 

posted @ 2020-09-28 16:20  所向披靡zz  阅读(94)  评论(0编辑  收藏  举报