一、设计模式
1、面向对象的设计模式有哪些原则?
六大面向对象设计原则
- 单一职责原则:一个类只负责一项职责。高内聚、低耦合
- 开闭原则:对扩展开放,对修改关闭。抽象、多态、接口
- 里氏替换原则:子类可替换父类。继承的正确使用
- 依赖倒置原则:依赖抽象而非实现。面向接口编程、依赖注入
- 接口隔离原则:使用多个专门的接口。接口细化、避免冗余
- 迪米特法则:最少知识原则。降低耦合、封装细节
2、简述开闭原则,哪些原则与他有关,分别是什么关系?
开闭原则是扩展开放,对修改封闭。当需求变化时,应该通过新增代码来扩展功能,而不应该修改已经稳定的旧代码,以避免引发连锁 bug。
与三个原则关系密切。
- 单一职责原则:
- 里氏替换原则
- 依赖倒置原则
单一职责让系统稳定,里氏替换保证子类扩展有效,依赖倒置提供扩展的抽象层。三者共同构成实现开闭原则的前提、手段与结构基础。
3、什么是里氏替换原则?
子类可以替代父类,并保证功能不被破坏。
4、什么是笛米特原则?
一个对象应该尽可能少地了解其他对象,只与“直接的朋友”通信,不要和陌生对象发生关系。
5、什么是依赖倒置原则?
高层模块不应该依赖低层模块;二者都应该依赖抽象。
抽象不应该依赖细节;细节应该依赖抽象。这样可以降低耦合,提高系统的稳定性、扩展性和可维护性。
6、补充
抽象类:抽象类是一种不能被实例化的类,用来作为其他类的父类。
接口类:接口是一种完全抽象的结构,只定义行为规范,而不包含实现(传统接口是“全抽象”)。
二、创建型
1、单例模式多线程
单例模式(Singleton)确保一个类在整个程序运行期间 只有一个实例,并提供全局访问点。
分为懒汉模式与饿汉模式。
懒汉式单例在多线程环境下会出现多个线程同时创建对象,导致多个实例。
安全的实现方案:
- 饿汉式单例(线程安全)
- 懒汉式(双重校验锁)
- 懒汉模式(静态内部类)
2、什么是工厂模式?什么是抽象模式?应用场景
工厂模式:将对象的创建延迟到子类,通过工厂来负责创建产品对象,而不是直接 new。
应用场景:日志写入、支付方式、数据库连接。
抽象模式:抽象工厂用于创建“产品族”的对象,而不是单个产品。一个工厂负责生产一整套相关的产品。
应用场景:扩平台UI、汽车零部件
简单来说:工厂方法生产一种产品,抽象工厂生产一整套产品。
三、结构型
1、什么是代理模式?应用场景
为某个对象提供一个代理(Proxy)来控制对它的访问。客户端不直接访问真实对象,而是通过代理访问。
中介替你做前后处理,并控制你是否能接触真实对象。
应用场景:
- 安全代理:控制用户是否有资格访问真实对象。
- 远程代理:客户端调用一个代理对象,代理负责远程调用服务器上的真实对象。
- 缓存代理:代理先查缓存,没命中再访问真实对象。
- 智能指针
2、什么是装饰器模式,应用场景
装饰器模式用于在不修改原有类的情况下,动态地给对象添加额外功能。
继承是静态扩展,装饰器是动态扩展。可以像贴“功能贴纸”一样给对象不断加新能力。
应用场景:
- 日志增强:增加额外功能
- 数据加密、压缩处理。
3、什么是组合模式?应用场景
组合模式(又称合成模式)是一种将对象组合成树形结构的设计模式,用于表示“整体-部分”的关系。
应用场景
- 菜单
- 文件系统
4、什么是责任链模式,应用场景?
让多个处理者(Handler)按顺序处理同一个请求,请求沿着链条往下传递,直到某个处理者能够处理它。调用者不需要知道是谁处理的。
应用场景
- Web过滤器
- 异常处理链
四、行为性
1、什么是模版方法?应用场景
在抽象类中定义算法流程(固定步骤),并将某些可变的步骤延迟到子类中实现。
即:算法骨架固定,部分步骤由子类重写。
应用场景
- 抽象类通用算法
2、什么是策略模式。应用场景
将一组可互换的算法封装成独立的策略类,并在运行时选择不同的策略,从而使算法的变化不影响使用它的客户端。
应用场景
- 服务器负载均衡策略:每种算法是一个策略类。
- 订单状态:不同状态触发不同处理策略。
3、什么是观察者模式。应用场景
当一个对象(被观察者 / Subject)状态发生变化时,会自动通知所有依赖它的对象(观察者 / Observer),使它们做出相应更新
应用场景
- 消息订阅
- 监控系统
- 交易系统的行情推送。
11万+

被折叠的 条评论
为什么被折叠?



