易考八股文之Java中的设计模式?

一、创建型模式

创建型模式主要关注对象的创建过程,通过某种方式控制对象的创建,以实现对象的解耦。

  1. 单例模式(Singleton Pattern):确保一个类只有一个实例,并提供一个全局访问点。常用于管理全局资源,如数据库连接、配置信息等。

  2. 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法让类的实例化推迟到子类中进行。

  3. 抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

  4. 建造者模式(Builder Pattern):将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。

  5. 原型模式(Prototype Pattern):用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。

  6. 简单工厂模式(Simple Factory Pattern):虽然不严格属于23种设计模式之一,但在实际开发中常用。它通过一个工厂类根据传入的参数来返回不同类的对象实例。

二、结构型模式

结构型模式关注于对象的组合,通过组合不同的对象以获得更大的结构。

  1. 适配器模式(Adapter Pattern):将一个类的接口转换成客户端所期望的另一种接口,使得原本因接口不兼容而不能一起工作的类可以一起工作。

  2. 装饰器模式(Decorator Pattern):动态地给一个对象添加一些额外的职责。就增加功能来说,装饰器模式相比生成子类更为灵活。

  3. 代理模式(Proxy Pattern):为其他对象提供一种代理以控制对这个对象的访问。

  4. 外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面,定义一个高层接口,这个接口使得这一子系统更加容易使用。

  5. 桥接模式(Bridge Pattern):将抽象部分与它的实现部分分离,使它们都可以独立地变化。

  6. 组合模式(Composite Pattern):将对象组合成树形结构以表示部分-整体层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。

  7. 享元模式(Flyweight Pattern):运用共享技术来有效地支持大量细粒度对象的复用。

三、行为型模式

行为型模式关注于对象之间的通信和职责分配,通过对象的行为来解决问题。

  1. 策略模式(Strategy Pattern):定义了一系列算法,并将每一个算法封装起来,使它们可以相互替换。策略模式让算法的变化独立于使用算法的客户。

  2. 模板方法模式(Template Method Pattern):定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

  3. 观察者模式(Observer Pattern):定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态发生变化时,会通知所有观察者对象,使它们能够自动更新自己。

  4. 迭代子模式(Iterator Pattern):提供一种方法顺序访问一个聚合对象中各个元素,而又不需暴露该对象的内部表示。

  5. 责任链模式(Chain of Responsibility Pattern):为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。

  6. 命令模式(Command Pattern):将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

  7. 备忘录模式(Memento Pattern):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

  8. 状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它的类。

  9. 访问者模式(Visitor Pattern):表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。

  10. 中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。

  11. 解释器模式(Interpreter Pattern):给定一个语言,定义它的文法的一种表示,并定义一个解释器,该解释器使用该表示来解释语言中的句子。

相关推荐
我想吃余3 分钟前
【C++篇】类与对象(上篇):从面向过程到面向对象的跨越
开发语言·c++
Niuguangshuo6 分钟前
Python设计模式:克隆模式
java·开发语言·python
双叶83613 分钟前
(C语言)单链表(1.0)(单链表教程)(数据结构,指针)
c语言·开发语言·数据结构·算法·游戏
想睡hhh15 分钟前
c++概念——入门基础概念
开发语言·c++
肖永威24 分钟前
python列表常用方法大全
开发语言·python
愚润求学29 分钟前
【C++】vector的模拟实现
开发语言·c++·stl·语法
suimeng633 分钟前
基本元素定位(findElement方法)
java·selenium
方渐鸿33 分钟前
【2025】快速部署安装docker以及项目搭建所需要的基础环境(mysql、redis、nginx、nacos)
java·运维·docker·持续部署·dockercompse
程序员鱼皮34 分钟前
2025最新 Java 面经:美团后端面试真实复盘,附答案模板,速速收藏!
java·后端·面试
我要学编程(ಥ_ಥ)40 分钟前
初始JavaEE篇 —— Mybatis-plus 操作数据库
java·java-ee·mybatis·mybatis-plus