设计模式面试介绍指南

设计模式面试介绍指南

一、设计模式概述

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

核心价值

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

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

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

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


二、单例模式(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,工厂方法用多态,更符合开闭原则

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

相关推荐
web3.0888999几秒前
使用PHP采集数据的完整技术文章,涵盖多种场景和最佳实践
开发语言·php
柒.梧.6 分钟前
Java基础高频面试题(含详细解析+易错点,面试必看)
java·开发语言·面试
佩奇大王7 分钟前
P593 既约分数
java·开发语言·算法
小同志0012 分钟前
软件测试周期 与 BUG
java·软件测试·bug·软件测试周期·bug等级
Han.miracle13 分钟前
Spring IoC 容器与 Bean 管理核心考点解析
java·ioc·di
polaris063014 分钟前
Java集合进阶
java·开发语言
AsDuang21 分钟前
Python 3.12 MagicMethods - 49 - __imatmul__
开发语言·python
tant1an29 分钟前
Spring Boot 基础入门:从核心配置到 SSMP 整合实战
java·数据库·spring boot·sql·spring
客卿12332 分钟前
力扣--组合,子集--回溯法的再探索--总结回溯法
java·算法·leetcode
毕设源码-赖学姐1 小时前
【开题答辩全过程】以 高校晚查寝系统为例,包含答辩的问题和答案
java