大家好,我是锋哥。今天分享关于【设计模式的主要分类是什么?请简要介绍每个分类的特点。】面试题。希望对大家有帮助;
设计模式的主要分类是什么?请简要介绍每个分类的特点。
1000道 互联网大厂Java工程师 精选面试题-Java资源分享网
设计模式是软件工程中用于解决常见问题的成熟方法,它们有助于提高系统的可重用性、可维护性和灵活性。设计模式的主要分类通常可以分为三大类:创建型设计模式、结构型设计模式和行为型设计模式。这三类分别针对对象的创建、对象之间的结构和对象之间的交互行为进行优化。
以下是三大类设计模式的简要介绍:
1. 创建型设计模式 (Creational Patterns)
特点:创建型模式关注于对象的创建方式,它们提供了灵活的机制来实例化对象,而不需要直接使用new
关键字,从而实现了更高的代码复用性和可扩展性。创建型模式可以减少类的依赖性,并控制对象的创建过程。
主要模式:
- 单例模式 (Singleton):保证某个类在系统中只有一个实例,并提供一个全局访问点来获取该实例。用于控制全局共享资源的访问。
- 工厂方法模式 (Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。常用于需要生产多种不同类型对象的场景。
- 抽象工厂模式 (Abstract Factory):提供一个创建一系列相关或相互依赖对象的接口,而无需指定具体的类。适用于需要生成多个对象族的情况。
- 建造者模式 (Builder):使用多个简单的对象一步步构建成一个复杂的对象。常用于需要多个步骤或阶段来构造复杂对象的情况。
- 原型模式 (Prototype):通过复制现有对象来创建新对象,而不是通过构造函数来实例化。适用于对象创建成本高,且希望通过克隆现有对象来创建新对象的场景。
2. 结构型设计模式 (Structural Patterns)
特点:结构型模式主要关注类和对象的组合及结构,旨在通过简化系统中的复杂结构来提高代码的可扩展性和灵活性。这些模式帮助将不同的组件组合成一个更大的系统,同时保持其独立性和可维护性。
主要模式:
- 适配器模式 (Adapter):将一个类的接口转化为客户端所期望的接口,使得原本接口不兼容的类能够合作。适用于希望使已有的类能适配不同接口的场景。
- 桥接模式 (Bridge):通过将抽象部分与其实现部分分离,使它们可以独立地变化。适用于需要将抽象和实现解耦的场景。
- 组合模式 (Composite):将对象组合成树形结构,以表示“部分-整体”的层次结构。适用于需要表示部分与整体的层次结构的场景。
- 装饰器模式 (Decorator):动态地给一个对象添加额外的职责(功能)。常用于在不改变对象结构的情况下,扩展对象的功能。
- 外观模式 (Facade):为一组复杂的子系统提供一个统一的接口,简化子系统的使用。适用于需要简化系统调用的复杂性时。
- 享元模式 (Flyweight):通过共享对象来减少内存消耗。适用于大量相似对象的共享场景,如文本渲染中的字符对象。
- 代理模式 (Proxy):为其他对象提供一种代理,以控制对该对象的访问。常用于延迟加载、访问控制、权限验证等场景。
3. 行为型设计模式 (Behavioral Patterns)
特点:行为型模式关注对象之间的交互和职责划分,旨在提高对象之间协作的灵活性,促进低耦合和高内聚。通过适当分配职责和行为,改善对象之间的通信和协调方式。
主要模式:
- 链式责任模式 (Chain of Responsibility):允许多个对象有机会处理请求,避免请求的发送者与接受者之间的耦合。每个处理者都可以选择处理请求或传递给下一个处理者。常用于事件处理、请求链传递的场景。
- 命令模式 (Command):将请求封装成对象,从而使用户可以使用不同的请求、队列或日志请求。常用于需要将请求排队、记录请求或撤销操作的场景。
- 解释器模式 (Interpreter):为语言的句法解释定义一个表达式的类。常用于设计编程语言解析器、正则表达式引擎等。
- 迭代器模式 (Iterator):提供一种方法顺序访问集合对象中的元素,而不暴露集合的内部表示。常用于遍历集合类的元素,支持不同集合的统一访问。
- 中介者模式 (Mediator):通过一个中介对象来集中控制多个对象之间的交互,避免对象之间的直接引用和复杂耦合。常用于降低对象之间的直接耦合,简化复杂的交互流程。
- 备忘录模式 (Memento):在不暴露对象实现的情况下,保存对象的内部状态,以便在需要时恢复到先前的状态。常用于撤销操作、历史记录等场景。
- 观察者模式 (Observer):当一个对象的状态发生改变时,所有依赖于它的对象都会自动更新。适用于需要多个对象响应一个对象状态变化的场景(如事件监听)。
- 状态模式 (State):允许对象在其内部状态改变时改变其行为,使得对象看起来似乎修改了其类。适用于对象的行为依赖于其状态的场景。
- 策略模式 (Strategy):定义一系列算法,将每个算法封装起来,并使它们可以互换。常用于根据不同的策略进行不同的行为选择,避免使用多个条件判断。
- 模板方法模式 (Template Method):定义一个算法的骨架,而将具体的实现步骤延迟到子类中。常用于对算法的结构和步骤进行控制,但允许子类提供具体的实现。
- 访问者模式 (Visitor):使得你可以在不改变对象结构的前提下定义作用于这些对象的新操作。常用于操作复杂结构中的元素,但需要针对不同元素实现不同的操作。
总结
分类 | 主要目标 | 主要模式 |
---|---|---|
创建型模式 | 关注如何创建对象,提供灵活的对象创建方式 | 单例、工厂方法、抽象工厂、建造者、原型 |
结构型模式 | 关注对象和类的结构,帮助建立更灵活、可扩展的系统架构 | 适配器、桥接、组合、装饰器、外观、享元、代理 |
行为型模式 | 关注对象之间的交互和职责划分,优化对象间的协作和通信 | 链式责任、命令、解释器、迭代器、中介者、备忘录、观察者、状态、策略、模板方法、访问者 |
这些设计模式分别在不同的场景下帮助我们优化程序结构、提高代码的可维护性和可扩展性。选择合适的设计模式能使得软件更加灵活、高效,并且易于理解和维护。