23种设计模式之单例模式

发布时间:2022-06-21 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了23种设计模式之单例模式脚本宝典觉得挺不错的,现在分享给大家,也给大家做个参考。

设计模式类型

设计模式分为三种类型,共23种

  1. 创建型模式单例模式、抽象工厂模式、原型模式、建造者模式、工厂模式

  1. 结构型模式:适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式

  1. 行为型模式:模版方法模式、命令模式、访问者模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(InterPReter模式)、状态模式、策略模式、职责链模式(责任链模式)。

单例模式

单例设计模式介绍

所谓类的单例设计模式,就是采取一定的方法保证在整个的软件系统中,对某个类只能存在一个对象实例,并且该类只提供一个取得其对象实例的方法(静态方法)。

 

比如Hibernate的SessionFactory,它充当数据存储的代理,并负责创建Session对象。SessionFactory并不是轻量级的,一般情况下,一个项目通常只需要一个SessionFactory就够,这是就会使用到单例模式。

单例设计模式八种方式

  1. 饿汉式(静态常量)

  1. 饿汉式(静态代码块)

  1. 懒汉式(线程不安全)

  1. 懒汉式(线程安全,同步方法)

  1. 懒汉式(线程安全,同步代码块)

  1. 双重检查

  1. 静态内部类

  1. 枚举

1.饿汉式(静态常量)

饿汉式(静态常量)应用实例

步骤如下:

  1. 构造器私有化 (止 new )

  1. 类的内部创建对象

  1. 向外暴露一个静态的公共方法。getInstance

  1. 代码实现

23种设计模式之单例模式

 

 代码:

package com.atguigu.singleton.tyPE1;

public class Singletontest01 {

    public static void main(String[] args) {
        //测试
        Singleton instance = Singleton.getInstance();
        Singleton instance2 = Singleton.getInstance();
        System.out.println(instance == instance2); // true
        System.out.println("instance.hashCode=" + instance.hashCode());
        System.out.println("instance2.hashCode=" + instance2.hashCode());
    }

}

//饿汉式(静态变量)

class Singleton {
    
    //1. 构造器私有化, 外部能new
    private Singleton() {
        
    }
    
    //2.本类内部创建对象实例
    private final static Singleton instance = new Singleton();
    
    //3. 提供一个公有的静态方法,返回实例对象
    public static Singleton getInstance() {
        return instance;
    }
    
}

 

优缺点说明:

  1. 优点:这种写法比较简单,就是在类装载的时候就完成实例化。避免了线程同步问题。

  1. 缺点:在类装载的时候就完成实例化,没有达到Lazy Loading的效果。如果从始至终从未使用过这个实例,则会造成内存的浪费

  1. 这种方式基于classloder机制避免了多线程的同步问题,不过,instance在类装载时就实例化,在单例模式中大多数都是调用getInstance方法, 但是导致类装载的原因有很多种,因此不能确定有其他的方式(或者其他的静态方法)导致类装载,这时候初始化instance就没有达到lazy loading的效果

  1. 结论:这种单例模式可用可能造成内存浪费

 

脚本宝典总结

以上是脚本宝典为你收集整理的23种设计模式之单例模式全部内容,希望文章能够帮你解决23种设计模式之单例模式所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。