设计模式面试介绍指南

设计模式面试介绍指南

一、设计模式概述

设计模式 是解决特定问题的可复用方案 ,不是具体代码,而是设计思想。就像建筑图纸,告诉你"怎么设计",而不是"用什么砖"。

核心价值

  • 提高代码可维护性(别人容易看懂)

  • 提高代码可扩展性(加功能不改旧代码)

  • 提高代码复用性(一套方案多处用)

  • 提高代码灵活性(适应需求变化)


二、单例模式(Singleton)

一句话介绍

"一个类只能创建一个对象,全局共享使用。"

适用场景

  • 数据库连接池(整个系统用一个)

  • 配置管理类(配置信息全局一份)

  • 日志工具类(所有地方写同一个日志文件)

  • 线程池(统一管理线程)

核心思想

复制代码
// 饿汉式(简单直接,线程安全)
public class Singleton {
    private static final Singleton instance = new Singleton();
    
    private Singleton() {}  // 私有构造,防止外部new
    
    public static Singleton getInstance() {
        return instance;
    }
}

// 懒汉式(需要时才创建,双重检查锁)
public class Singleton {
    private static volatile Singleton instance;
    
    private Singleton() {}
    
    public static Singleton getInstance() {
        if (instance == null) {
            synchronized (Singleton.class) {
                if (instance == null) {
                    instance = new Singleton();
                }
            }
        }
        return instance;
    }
}

面试回答示例

"单例模式确保一个类只有一个实例,并提供全局访问点。比如我们项目中的配置管理类,所有模块都要读取配置,如果每个地方都new一个,不仅浪费内存,还可能配置不一致。用单例模式,整个系统共享一份配置,修改一处,所有地方都生效。"


三、工厂模式(Factory)

一句话介绍

"不直接new对象,让工厂帮你创建,隐藏创建细节。"

适用场景

  • 创建复杂对象(需要很多参数)

  • 需要统一管理对象创建

  • 需要根据条件创建不同对象

  • 解耦对象创建和使用

核心思想

复制代码
// 简单工厂
public class CarFactory {
    public static Car createCar(String type) {
        if ("Benz".equals(type)) {
            return new Benz();
        } else if ("BMW".equals(type)) {
            return new BMW();
        }
        return null;
    }
}

// 使用
Car car = CarFactory.createCar("Benz");
car.run();

// 工厂方法模式(更灵活)
public interface CarFactory {
    Car createCar();
}

public class BenzFactory implements CarFactory {
    @Override
    public Car createCar() {
        return new Benz();
    }
}

面试回答示例

"工厂模式将对象的创建和使用分离。比如我们项目要对接多个支付渠道(微信、支付宝、银联),每个支付方式创建逻辑不同。如果用if-else直接new,代码会越来越臃肿。用工厂模式,把创建逻辑封装在工厂里,业务代码只需要调用工厂方法,不用关心具体创建过程。这样新增支付方式时,只需要扩展工厂,不用修改原有代码,符合开闭原则。"


四、面试技巧

1. 不要背概念

  • 不要说"单例模式是创建型模式,确保一个类只有一个实例..."

  • 要说"我们项目里有个配置管理类,用单例模式保证全局只有一份"

2. 结合项目经验

  • 单例:配置管理、日志工具、数据库连接池

  • 工厂:支付工厂、数据源工厂、消息队列工厂

3. 说明优缺点

  • 单例:节省资源,但可能成为"上帝对象",不好测试

  • 工厂:解耦,但增加复杂度,简单场景没必要

4. 提到设计原则

  • 开闭原则:对扩展开放,对修改关闭(工厂模式符合)

  • 单一职责:一个类只做一件事(工厂只负责创建)

  • 依赖倒置:依赖抽象,不依赖具体(工厂方法模式)

5. 对比其他模式

  • 单例 vs 静态类:单例可以继承、实现接口,更灵活

  • 简单工厂 vs 工厂方法:简单工厂用if-else,工厂方法用多态,更符合开闭原则

总结 :设计模式不是炫技,而是解决问题的工具。用对了提升代码质量,用错了增加复杂度。面试时重点说明"为什么用"和"解决了什么问题",而不是"怎么实现"。

相关推荐
m0_708830969 小时前
C++中的享元模式实战
开发语言·c++·算法
naruto_lnq9 小时前
分布式计算C++库
开发语言·c++·算法
Hx_Ma169 小时前
Map集合的5种遍历方式
java·前端·javascript
小手cool9 小时前
Java 列表中查找最小值和最大值最有效率的方法
java
惊讶的猫9 小时前
多线程同步问题及解决
java·开发语言·jvm
wfsm9 小时前
工厂模式创建动态代理实现类
java·开发语言
好好研究9 小时前
总结SSM设置欢迎页的方式
xml·java·后端·mvc
Hui Baby9 小时前
java -jar 启动原理
java·pycharm·jar
weixin_511255219 小时前
更新jar内资源和代码
java·jar
m0_706653239 小时前
模板编译期排序算法
开发语言·c++·算法