八股文面试攻略二:设计模式

一、设计模式

1、面向对象的设计模式有哪些原则?

六大面向对象设计原则

  • 单一职责原则:一个类只负责一项职责。高内聚、低耦合
  • 开闭原则:对扩展开放,对修改关闭。抽象、多态、接口
  • 里氏替换原则:子类可替换父类。继承的正确使用
  • 依赖倒置原则:依赖抽象而非实现。面向接口编程、依赖注入
  • 接口隔离原则:使用多个专门的接口。接口细化、避免冗余
  • 迪米特法则:最少知识原则。降低耦合、封装细节

2、简述开闭原则,哪些原则与他有关,分别是什么关系?

开闭原则是扩展开放,对修改封闭。当需求变化时,应该通过新增代码来扩展功能,不应该修改已经稳定的旧代码,以避免引发连锁 bug。

与三个原则关系密切。

  • 单一职责原则:
  • 里氏替换原则
  • 依赖倒置原则

单一职责让系统稳定,里氏替换保证子类扩展有效,依赖倒置提供扩展的抽象层。三者共同构成实现开闭原则的前提、手段与结构基础。

3、什么是里氏替换原则?

子类可以替代父类,并保证功能不被破坏。

4、什么是笛米特原则?

一个对象应该尽可能少地了解其他对象,只与“直接的朋友”通信,不要和陌生对象发生关系。

5、什么是依赖倒置原则?

高层模块不应该依赖低层模块;二者都应该依赖抽象。
抽象不应该依赖细节;细节应该依赖抽象。这样可以降低耦合,提高系统的稳定性、扩展性和可维护性。

6、补充

抽象类:抽象类是一种不能被实例化的类,用来作为其他类的父类。

接口类:接口是一种完全抽象的结构,只定义行为规范,而不包含实现(传统接口是“全抽象”)。

二、创建型

1、单例模式多线程

单例模式(Singleton)确保一个类在整个程序运行期间 只有一个实例,并提供全局访问点。

分为懒汉模式饿汉模式

懒汉式单例在多线程环境下会出现多个线程同时创建对象,导致多个实例

安全的实现方案:

  • 饿汉式单例(线程安全)
  • 懒汉式(双重校验锁)
  • 懒汉模式(静态内部类)

2、什么是工厂模式?什么是抽象模式?应用场景

工厂模式:将对象的创建延迟到子类,通过工厂来负责创建产品对象,而不是直接 new。

应用场景:日志写入、支付方式、数据库连接。

抽象模式:抽象工厂用于创建“产品族”的对象,而不是单个产品。一个工厂负责生产一整套相关的产品。

应用场景:扩平台UI、汽车零部件

简单来说:工厂方法生产一种产品,抽象工厂生产一整套产品。

三、结构型

1、什么是代理模式?应用场景

为某个对象提供一个代理(Proxy)来控制对它的访问。客户端不直接访问真实对象,而是通过代理访问。

中介替你做前后处理,并控制你是否能接触真实对象。

应用场景:

  • 安全代理:控制用户是否有资格访问真实对象。
  • 远程代理:客户端调用一个代理对象,代理负责远程调用服务器上的真实对象。
  • 缓存代理:代理先查缓存,没命中再访问真实对象。
  • 智能指针

2、什么是装饰器模式,应用场景

装饰器模式用于在不修改原有类的情况下,动态地给对象添加额外功能

继承是静态扩展,装饰器是动态扩展。可以像贴“功能贴纸”一样给对象不断加新能力。

应用场景:

  • 日志增强:增加额外功能
  • 数据加密、压缩处理。

3、什么是组合模式?应用场景

组合模式(又称合成模式)是一种将对象组合成树形结构的设计模式,用于表示“整体-部分”的关系。

应用场景

  • 菜单
  • 文件系统

4、什么是责任链模式,应用场景?

让多个处理者(Handler)按顺序处理同一个请求,请求沿着链条往下传递,直到某个处理者能够处理它。调用者不需要知道是谁处理的。

应用场景

  • Web过滤器
  • 异常处理链

四、行为性

1、什么是模版方法?应用场景

在抽象类中定义算法流程(固定步骤),并将某些可变的步骤延迟到子类中实现。
即:算法骨架固定,部分步骤由子类重写。

应用场景

  • 抽象类通用算法

2、什么是策略模式。应用场景

将一组可互换的算法封装成独立的策略类,并在运行时选择不同的策略,从而使算法的变化不影响使用它的客户端。

应用场景

  • 服务器负载均衡策略:每种算法是一个策略类。
  • 订单状态:不同状态触发不同处理策略。

3、什么是观察者模式。应用场景

当一个对象(被观察者 / Subject)状态发生变化时,会自动通知所有依赖它的对象(观察者 / Observer),使它们做出相应更新

应用场景

  • 消息订阅
  • 监控系统
  • 交易系统的行情推送。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值