一文彻底搞清楚:单例类、枚举类、抽象类、接口、设计模式

🧠 一文彻底搞清楚:单例类、枚举类、抽象类、接口、设计模式

本文将逐个解释:它们 是什么、学它有什么用、解决了什么问题、怎么用


🔹 1. 单例类(Singleton)

✅ 是什么:

一种设计模式:一个类在整个程序生命周期只会存在一个实例

✅ 解决的问题:

  • 资源共享(如配置对象、日志器、数据库连接池)

  • 控制全局状态,只需一份实例,节省内存

✅ 学什么:

  • 饿汉式 / 懒汉式 / 双重检查锁 / 枚举实现方式

  • 多线程安全问题

✅ 示例(饿汉式):

public class Logger {
    private static final Logger instance = new Logger();

    private Logger() {} // 私有构造

    public static Logger getInstance() {
        return instance;
    }
}

Logger.getInstance() 永远返回同一个对象


🔹 2. 枚举类(Enum)

✅ 是什么:

一种有固定值集合的类,每个枚举值本质上是这个类的一个实例。

✅ 解决的问题:

  • 表达明确、受限的状态或类型(如星期、订单状态、性别)

  • 安全替代魔法字符串 / 数字常量(可枚举 + 可扩展)

✅ 学什么:

  • 枚举定义、枚举属性、枚举方法

  • 枚举在 switch 中的使用

✅ 示例:

public enum OrderStatus {
    PENDING, PAID, SHIPPED, COMPLETED
}

OrderStatus status = OrderStatus.PAID;
if (status == OrderStatus.PAID) {
    // 处理支付逻辑
}


🔹 3. 抽象类(Abstract Class)

✅ 是什么:

不完整的类,不能实例化,必须被继承。可以有方法的默认实现,也可以包含抽象方法(没有实现的方法)。

✅ 解决的问题:

  • 提供通用模板 + 部分行为实现

  • 父类定义公共逻辑,子类补充细节

✅ 学什么:

  • abstract 修饰类和方法

  • 抽象类 vs 接口的区别

✅ 示例:

public abstract class Animal {
    public abstract void speak(); // 抽象方法
    public void eat() {
        System.out.println("Animal is eating");
    }
}

public class Dog extends Animal {
    public void speak() {
        System.out.println("Woof!");
    }
}


🔹 4. 接口(Interface)

✅ 是什么:

一组方法的规范或契约,实现类必须实现所有方法。Java 中接口支持多继承。

✅ 解决的问题:

  • 实现解耦:只依赖方法定义,而非具体实现

  • 支持多态、面向接口编程、插件式开发

✅ 学什么:

  • interface 定义语法

  • implements 和多接口实现

  • 默认方法(default)、静态方法(static)

✅ 示例:

public interface Animal {
    void speak();
}

public class Cat implements Animal {
    public void speak() {
        System.out.println("Meow~");
    }
}


🔹 5. 设计模式(Design Patterns)

✅ 是什么:

前人总结的一套可复用、可维护、可扩展的解决方案模板,解决特定问题的代码设计方案。

✅ 解决的问题:

  • 提高代码复用性、可读性、灵活性

  • 解耦各模块职责,避免重复轮子

  • 架构结构更清晰,易于扩展维护


🎯 常见设计模式分类(23 种经典): 

类别模式名称中文名作用方向
创建型Singleton单例模式控制对象的唯一实例
Factory Method工厂方法模式延迟对象创建、解耦构造逻辑
Abstract Factory抽象工厂模式一组对象的构造工厂
Builder建造者模式构建复杂对象
Prototype原型模式克隆已有对象
结构型Adapter适配器模式接口转换,兼容旧接口
Bridge桥接模式分离抽象和实现
Composite组合模式树状结构,如 DOM、菜单等
Decorator装饰器模式动态增强类功能
Facade外观模式简化外部调用接口
Flyweight享元模式共享重复对象,节省内存
Proxy代理模式控制对象访问
行为型Strategy策略模式可切换算法或行为
Template Method模板方法模式定义流程骨架,子类实现步骤
Observer观察者模式事件发布-订阅
State状态模式对象状态切换
Command命令模式封装请求为对象
Chain of Responsibility责任链模式按顺序传递请求处理者
Iterator迭代器模式顺序访问集合内部元素
Mediator中介者模式降低对象之间耦合
Memento备忘录模式保存和恢复对象状态
Interpreter解释器模式自定义语言解析器
Visitor访问者模式扩展对象结构功能

🚶一句话记忆法(各类核心用途):

类型一句话记忆
创建型“怎么造对象?”
结构型“怎么组合对象?”
行为型“对象之间怎么协作?”

🚶优先掌握的常用模式:

优先级推荐模式场景
★★★★★单例(Singleton)Spring 容器/配置/缓存对象
★★★★★工厂(Factory)控制对象创建逻辑,如 DAO 工厂
★★★★☆策略(Strategy)可切换算法、支付/排序等策略选择
★★★★☆模板(Template)通用流程抽象,Spring 的 JdbcTemplate
★★★★☆观察者(Observer)事件机制,如 DOM/事件总线
★★★★☆装饰器(Decorator)动态增强类功能,如 I/O、日志拦截器
★★★☆☆责任链(Chain)请求过滤链、权限验证、日志链

🔁 这些概念之间的区别与联系

项目是什么能否实例化是否用于架构设计能否包含方法体
单例类特殊设计类✅ 仅一个
枚举类常量集合✅(固定多个)✅(可定义方法)
抽象类模板类✅(可部分实现)
接口方法契约✅(default 除外)
设计模式设计思想✅✅✅❌(不是代码结构)

🧠 总结一句话

学好这 5 个概念,你就从“写代码的人”开始向“设计系统的人”进阶了。


✍️ 实战

学完这个概念建议做什么
单例类自己实现一个线程安全的 Logger 工具类
枚举类将系统中所有状态码、角色常量替换为 enum
抽象类尝试设计一个“抽象支付类”或“抽象动物类”
接口用接口定义一组“行为”,写多实现类
设计模式每周学 1~2 个经典设计模式 + 实战项目应用
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

星空下的DeppBing

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值