易百教程

Java设计模式面试题和答案(2022年收集更新)

2022年收集更新的Java设计模式面试题和答案,设计模式通常是软件开发行业中使用的一组标准化实践。 设计模式代表了社区为日常软件开发任务中面临的一般问题提供的解决方案。下面来看看最常见的设计模式面试问题和答案。
基于问题分析,我们可以将设计模式分为以下几类。 创造模式 工厂方法/模板抽象工厂建造者原型辛格尔顿结构图案 适配器桥筛选合成的装饰器正面蝇量级代理人 行为模式 解释器模式模板方法/模式责任链命令模式迭代器模式策略模式访客模式 J2EE 模式 MVC 模式数据访问对象模式前控制器模式拦截过滤器模式转移对象模式 完整答案
Java设计模式有以下优点: 设计模式可在多个项目中重用。设计模式提供了一个有助于定义系统架构的解决方案。设计模式捕捉软件工程经验。设计模式为应用程序的设计提供了透明度。由于它们建立在专业软件开发人员的知识和经验之上,因此它们得到了证明和充分证明。 完整答案
1994 年,四位作者 Erich Gamma、Ralph Johnson、Richard Hel 和 John Vlissides 出版了一本名为 Design Patterns Elements of Reusable Object-Oriented Software 的书。本书介绍了软件开发中的设计模式的概念。 这四位作者被称为四人组 GOF。 完整答案
创造型设计模式与创建对象的方式有关。在类的实例化时做出决定时使用创建设计模式。 EmpRecord e1=new EmpRecord(); 由于 new 关键字用于在 Java 中创建对象,因此,这里我们使用 new 关键字创建实例。在某些情况下,必须根据程序的性质改变对象的性质。在这种情况下,我们应该使用创建设计模式来提供更通用和灵活的方法。 完整答案
工厂模式是Java中最常用的设计模式。这些设计模式属于创建模式,因为该模式提供了创建对象的最佳方式之一。在工厂模式中,我们不向客户端公开创建逻辑,而是使用标准接口引用创建的对象。工厂模式允许子类选择要创建的对象类型。工厂模式也称为虚拟构造器。 完整答案
抽象工厂模式定义了一个抽象类或接口,用于创建相关对象的系列,但没有指定它们的具体子类。这意味着抽象工厂允许一个类返回一个类工厂。这就是为什么抽象工厂模式比工厂模式高一级。抽象工厂模式围绕创建其他类的超类工作。抽象工厂模式属于创建模式,因为该模式提供了创建对象的最佳方法之一。在抽象工厂模式中,接口负责创建相关对象的工厂,而无需明确标识它们的类。每个生成的工厂都可以根据工厂模式给出对象。 完整答案
结构模式用于提供有关类组合和对象结构的解决方案和有效标准。它们依赖于继承和接口的概念来允许多个对象或类一起工作并形成一个单一的工作整体。结构设计模式负责如何组合类和对象以形成更大的结构。 完整答案
Java中的单例模式是一种允许应用程序中的单个实例的模式。单例模式的一个很好的例子是 java.lang.Runtime。单例模式状态定义了一个只有一个实例的类,并提供了一个全局访问点。换句话说,类的职责是只创建一个实例,而所有其他类都可以使用一个对象。 完整答案
有两种创建单例模式的方法: 早期实例化它负责在加载时创建实例。 惰性实例化它负责在需要时创建实例。 完整答案
适配器模式根据需求将一个类的接口转换为另一个接口。换句话说,它可以让您在使用具有不同接口的类服务时,根据需要转换接口。它也被称为包装器。 完整答案
适配器模式用于以下情况: 当对象需要使用具有不兼容接口的现有类时。如果想创建一个可重用的类,它与没有兼容接口的类协作。 完整答案
在描述设计模式时需要注意以下几点: 模式名称和分类。问题和解决方案。后果:还应解决变化和依赖于语言的替代方案。用途:确定实际系统中的用途及其效率。 完整答案
装饰器模式是流行的 Java 设计模式之一。它很常见,因为它在 java.io(包)中的大量使用。装饰器模式使用组合代替继承来在运行时扩展对象的功能。 BufferedReader 和 BufferedWriter 是 Java 中装饰器模式的一些优秀示例。 完整答案
这个问题是一个常见的 Java 设计模式面试问题,因为策略和状态模式具有相同的结构。两种模式的 UML 类图看起来完全相同,但它们的意图不同。状态设计模式用于管理和定义对象的状态,而策略模式用于描述一组可互换的算法。 完整答案
复合设计模式允许客户对可能或可能不代表对象层次结构的对象进行集体操作。 复合设计模式的优点如下: 它描述了包含原始和复杂对象的类层次结构。它使添加新类型的组件变得容易。它通过可管理的类或接口来促进结构的灵活性。 完整答案
复合模式用于以下情况: 当我们想要表示对象的部分或全部层次结构时。如果我们需要动态地将职责添加到单个对象而不影响其他对象。 完整答案
JDK 库中使用的一些设计模式如下: Wrapper 类使用装饰器模式。Calendar类(运行时)使用单例模式。Wrapper 类使用像 Integer.valueOf 这样的工厂模式。事件处理框架使用像 swing、awt 这样的观察者模式。 完整答案
构建器设计模式的优点如下: 它有助于明确区分对象的构造和表示。它提供了对施工过程的改进控制。构造函数参数减少了,并在高度可读的方法调用中提供。在设计模式中,对象总是以完整的状态被实例化。在 Builder 设计模式中,Immutable 对象可以在对象构建过程中快速构建。 完整答案
有很多方法可以在 Java 中编写线程安全的单例。可以通过使用双重检查锁定编写单例来编写线程安全的单例。另一种方法是,通过使用在类加载期间初始化的静态 Singleton 实例。通过使用 Java 枚举来创建线程安全的单例,这是最直接的方法。 完整答案
是的,可以创建单例对象的克隆。 完整答案
术语 Proxy 代表一个对象代表另一个对象。代理模式为其他目的提供替代或占位符来控制对其的访问。根据四人组的说法,代理模式“提供对访问原始对象的控制”。我们可以执行许多安全操作,例如隐藏原始对象的信息、按需加载等。它也被称为占位符或代理。 完整答案
在很多情况下,代理模式是有益的。下面来看看一些不同的代理。 保护代理 它根据某些条件控制对真实主题的访问。 虚拟代理 虚拟代理用于实例化昂贵的对象。代理在实现中管理真实主体的生命周期。它决定实例创建的需要以及何时重用它。虚拟代理优化性能。 缓存代理 缓存代理用于缓存对真实主题的昂贵调用。代理可以使用许多缓存策略。其中一些是通读、通写、缓存和基于时间的。缓存代理用于提高性能。 远程代理远程代理用于分布式对象通信。远程代理通过调用本地对象方法在远程对象上执行。 智能代理智能代理用于实现对对象的日志调... 完整答案
在责任链模式中,Sender 向对象链发送请求,链中的任何对象都可以处理该请求。责任链模式避免将请求的发送者耦合到其接收者。例如,ATM 服务在货币交易中使用责任链设计模式。此外,我们可以解释,通常每个接收器都包含另一个接收器的引用。如果一个对象无法处理请求,那么它会将相同的请求发送给下一个接收者,依此类推。 完整答案
它使耦合最小化。它在将职责分配给对象时提供了灵活性。它允许一组类作为一个类。一个类中产生的事件可以在组合的帮助下发送到其他处理程序类。 责任链模式的使用 它用于以下情况: 当多个对象准备好处理一个请求并且处理程序未知时。如果必须动态指定可以处理请求的集合或一组对象。 完整答案
适配器模式的动机是使一个或多个类的接口看起来相似。Bridge 模式旨在将类的接口与其实现隔离,因此可以在不更改客户端代码的情况下更改或替换实现。 完整答案
服务定位器用于创建类依赖项。无论是否使用服务定位器,该类仍然负责创建其依赖项。服务定位器也用于隐藏依赖关系。当对象从定位器获取连接时,我们不能通过查看对象来判断它是否与数据库连接。使用依赖注入,包含其依赖的类既不知道也不关心它们来自哪里。一个显着的区别是依赖注入更容易进行单元测试,因为可以传入它的依赖对象的模拟实现。可以结合这两个对象并应用服务定位器。 完整答案
MVC模式是 J2EE 设计模式类别中最常用的模式之一。它与模型-视图-控制器的概念非常相似。缩写 MVC 取自 Model-view-controller 概念。模型是对象,用作将在应用程序中使用的所有对象的蓝图。视图包含位于模型中的数据和信息的表示方面。控制器控制模型和视图,因为它们充当两个对象之间的连接。控制器在 View 和 Model 之间扮演接口的角色,并且拦截所有传入的请求。 完整答案
拦截过滤器设计模式用于在请求处理之前和之后拦截和操纵请求和响应。过滤器执行请求的身份验证/授权/记录或跟踪,然后将请求转发给相应的处理程序。让我们看一下拦截设计模式的一些基本实体。 过滤器设计模式它在请求处理程序执行请求之前或之后执行某个任务。 过滤链它包含多个过滤器,并有助于在目标上按定义的顺序执行它们。 目标目标对象是请求处理程序 过滤器管理器它管理过滤器和过滤器链。 客户客户端对象是向目标对象发送请求的对象。 拦截过滤器设计模式的好处 过滤器模式通过松散耦合的处理程序提供中央控制。它扩展了... 完整答案
数据访问对象模式用于将低级数据访问 API 或操作与高级业务服务隔离开来。以下是 DAO 模式中的组件。 数据访问对象接口 DAO 接口描述了对模型对象执行的标准操作。 数据访问对象具体类 这个类实现了一个 DAO 接口。此类负责从数据源获取数据,该数据源可以是 Xml/数据库或任何其他存储机制。 模型对象或值对象 这个对象是一个普通的旧 java 对象,包含 get/set 方法来存储使用 DAO 类检索到的数据。 完整答案
VO 和 JDO 的区别在于 JDO 是一种与实体 bean 竞争的持久性技术。它允许创建 POJO(普通的旧 java 对象)并将它们保存到数据库中。而 VO(值对象)代表一种抽象设计模式,它与实体 bean、JDBC 和 JDO 结合使用。 完整答案