【设计模式】关于设计模式的一些问题

本文详细介绍了设计模式中的单例模式,包括其作用、五种实现方式,如饿汉式、懒汉式、双重检测锁、静态内部类和枚举类型,以及如何解决反射破解单例的问题。此外,还探讨了装饰者设计模式的实现、应用场景和工作原理。通过对这两种设计模式的深入理解,有助于提升代码的复用性和灵活性。
摘要由CSDN通过智能技术生成

单例模式

1. 单例设计模式的作用?

单例设计模式 保证在一个jvm中,该对象只有一个实例存在。
单例模式重点在于在整个系统上共享一些创建时比较耗资源的对象。整个应用只维护一个特定类实例,它被所有组件共同使用。

2. 单例模式的五种实现方式?

  1. 饿汉式:类初始化时创建单例,线程安全
  2. 懒汉式:创建实例单例的时候在创建,需要考虑线程安全。
  3. 双重检测锁: 效率高
  4. 静态内部类:可以同时保证延迟加载和线程安全
  5. 枚举类型:线程安全和防止反射调用构造器,还提供自动序列化机制,防止反序列化的时候创建新的对象

2.1 饿汉式:

也就是类加载的时候立即实例化对象,
实现的步骤是先私有化构造方法,对外提供唯一的静态入口方法

package com.wanghaha.desginPattern;

public class SingletonInstance {
   
    // 声明此类型的变量,并实例化,当该类被加载的时候 就完成了实例化并保存在内存中
    private final static SingletonInstance instance = new SingletonInstance();

    // 私有化所有的构造方法,防止直接通过new关键字实例化
    private SingletonInstance(){
   }

    // 对外提供一个获取实例的静态方法
    public static SingletonInstance getInstance(){
   
        return instance;
    }

}

饿汉式单例设计模式代码中,static变量会在类加载时初始化,此时也不会涉及多个线程对象访问该对象的问题。虚拟机只会装载一次该类,肯定不会发生并发访问的问题。因此可以省略synchronized关键字。

存在问题: 如果只是加载本类,而不是调用getIntance(),甚至永远没有调用,则会造成资源的浪费

2.2 懒汉式

线程不安全,多个线程可能同时创建实例对象。
性能不太好。

package com.wanghaha.desginPattern;

public class SingletonInstance2 {
   
    // 声明此类型的变量,并没有实例化
    private  static SingletonInstance2 instance = null;

    // 私有化所有的构造方法,防止直接通过new关键字实例化
    private SingletonInstance2(){
   }

    // 对外提供一个获取实例的静态方法,为了数据安全添加synchronized关键字
    public static synchronized 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值