30个设计模式面试题及答案
什么是设计模式?
设计模式是软件设计中常见问题的通用解决方案。它不是可以直接转换为代码完成设计。它还是关于如何解决可在许多不同情况下使用问题的描述模板。
使用设计模式有什么好处?
使用设计模式的好处如下:
- 设计模式可以通过提供经过测试、证明的开发范例来加快开发过程。
- 有效的软件设计需要考虑直到实施后期才可能出现的问题。重用设计模式有助于防止可能导致重大问题+ 的细微问题,并提高熟悉这些模式的编码人员和架构师的代码可读性。
- 设计模式提供了一个标准术语,并且特定于特定场景。这有助于为同一解决方案使用相同模式名称的设计师和架构师之间的沟通,从而实现更快、更有效的沟通。
- 最后,设计模式可以通过提供关注点分离来改进代码的模块化。设计模式可以帮助封装复杂的功能并将其作为一个单元呈现。
设计模式有多少种类型?
设计模式大致分为三类:
- 创作模式
- 结构模式
- 行为模式
- 创意设计模式
什么是创造性设计模式?
创建型设计模式是那些处理对象创建机制的模式,试图以适合情况的方式创建对象。它们有助于使系统独立于其对象的创建、组合和表示方式。
创造性设计模式有哪些类型?
创造型设计模式的类型有:
- 单例模式
- 工厂方法模式
- 抽象工厂模式
- 建造者模式
- 原型模式
什么是单例模式?
单例模式确保一个类只有一个实例,并提供对该实例的全局访问点。它是最简单的设计模式之一,但由于其被滥用的可能性,它也是最具争议的设计模式之一。
什么是工厂方法模式?
工厂方法模式定义了一个用于创建对象的接口,但允许子类决定实例化哪个类。它提供了一个用于创建对象的抽象接口,但将要实例化的对象的选择权留给了子类。
什么是抽象工厂模式?
抽象工厂模式提供了一个接口,用于创建相关或依赖对象的系列,而无需指定它们的具体类。它经常与工厂方法模式结合使用。
什么是建造者模式?
Builder Pattern 将复杂对象的构造与其表示分开,允许相同的构造过程创建各种表示。它通常与复合模式结合使用。
什么是原型模式?
原型模式通过克隆现有对象来创建新对象。这种方法可以通过避免昂贵的初始化操作来节省时间和资源。
结构设计模式
什么是结构设计模式?
结构设计模式是那些处理对象组合的模式,通过识别实现实体之间关系的简单方法来简化设计。
结构设计模式有哪些类型?
结构设计模式的类型有:
- 适配器模式
- 桥梁模式
- 组合模式
- 装饰者模式
- 外观模式
- 享元模式
- 代理模式
什么是适配器模式?
适配器模式允许具有不兼容接口的对象进行协作。它将一个类的接口转换为客户期望的另一个接口。此模式通常用于使现有类与其他类一起工作而无需修改其源代码。
什么是桥接模式?
桥接模式将抽象与其实现解耦,因此两者可以独立变化。当抽象和实现都可以具有彼此独立的变体时,它很有用。
什么是复合模式?
Composite Pattern 将对象组合成树结构以表示部分-整体层次结构。它允许客户端统一处理单个对象和对象组合。
什么是装饰者模式?
Decorator Pattern 动态地将附加职责附加到对象。它为扩展功能提供了一种灵活的子类化替代方法。
什么是门面模式?
外观模式为子系统中的一组接口提供统一的接口。它定义了一个更高级的接口,使子系统更易于使用。
享元模式是什么?
享元模式使用共享来有效地支持大量细粒度对象。它用于在处理大量具有相似或相同状态的对象时最小化内存使用并提高性能。
什么是代理模式?
代理模式为另一个对象提供了一个代理或占位符来控制对它的访问。它允许对真实对象进行受控访问,通常用于增加对对象的安全性或远程访问。
行为设计模式
##什么是行为设计模式?
行为设计模式是那些处理对象之间通信的模式,定义了对象相互交互和通信的方式。
行为设计模式有哪些类型?
行为设计模式的类型有:
- 责任链模式
- 命令模式
- 解释器模式
- 迭代器模式
- 中介者模式
- 纪念图案
- 观察者模式
- 状态模式
- 策略模式
- 模板方法模式
- 访客模式
什么是责任链模式?
责任链模式为请求创建一个接收者对象链。它允许多个对象处理请求,而无需知道哪个对象将处理它。
什么是命令模式?
命令模式将请求封装为一个对象,从而允许对具有不同请求的客户端进行参数化、对请求进行排队或记录,并支持可撤消的操作。
什么是解释器模式?
解释器模式提供了一种评估语言语法或表达式的方法。它定义了其语法的表示以及使用该表示来解释语言中的句子的解释器。
什么是迭代器模式?
迭代器模式提供了一种在不暴露其底层表示的情况下顺序访问聚合对象元素的方法。它将遍历对象的算法与对象本身解耦。
什么是中介者模式?
中介者模式定义了一个对象,它封装了一组对象如何交互。它通过防止对象相互显式引用来促进松散耦合。
什么是纪念品模式?
Memento Pattern 捕获并外部化对象的内部状态,以便以后可以恢复它,而不会违反封装。
什么是观察者模式?
观察者模式定义了对象之间的一对多依赖关系,这样当一个对象改变状态时,它的所有依赖对象都会收到通知并自动更新。
什么是状态模式?
状态模式允许对象在其内部状态发生变化时改变其行为。当一个对象的行为取决于它的状态并且状态的数量很大时,它很有用。
什么是策略模式?
策略模式定义了一系列算法,封装了每一个算法,并使它们可以互换。它允许算法独立于使用它的客户端而变化。