面试篇-Java-5+设计模式

news2024/11/15 15:55:51

文章目录

  • 前言
  • 一、你知道工厂方法模式吗
    • 1.1 你有使用过简单工厂模式吗
    • 1.2 你有使用过简单工厂方法模式吗
    • 1.3 你有使用过抽象工厂方法模式吗
    • 1.4 你有使用过策略模式吗
  • 二、你们项目中是怎么使用设计模式的呢
    • 2.1 策略模式+ 工厂模式 实现不同的方式的登录
      • 2.1.1 定义一个登录的接口类
      • 2.1.2 定义不同类型登录的具体实现
      • 2.1.3 配置有哪些登录方式
      • 2.1.4 项目启动获取到不同的登录方式bean
      • 2.1.5 登录方法控制器进行不同方式的登录
    • 2.2 责任链模式实现数据不同层面的验证
      • 2.2.1 定义抽象处理者
      • 2.2.2 定义不同的验证
      • 2.2.3 定义验证的数据
      • 2.2.4 定义责任链调用
  • 总结


前言

你在项目开发中都用到过什么设计模式,你是在哪些场景下使用的。本文重点对面试的问题进行介绍,祝愿每位程序员都能顺利上岸!!!


一、你知道工厂方法模式吗

通过不同的工厂生产不同的产品,进行使用;或者通过同一个工厂生产各种产品;

1.1 你有使用过简单工厂模式吗

通过定义一个产品,然后不同的工厂都可以来生产改产品。如果新增咖啡种类,不仅要增加具体的咖啡种类,还要修改点咖啡的代码。
需求:设计一个咖啡店点餐系统。
设计一个咖啡类(Coffee),并定义其两个子类(美式咖啡【AmericanCofee】和拿铁咖啡【Lattecoffee】);再设计一个咖啡店类(CoffeeStore),咖啡店具有点咖啡的功能。

在这里插入图片描述

咖啡店根据客户下单的咖啡类型进而生产不同的咖啡
在这里插入图片描述

通过具体的工厂来创建产品
在这里插入图片描述
简单工厂包含如下角色:

  • 抽象产品:定义了产品的规范,描述了产品的主要特性和功能。
  • 具体产品:实现或者继承抽象产品的子类
  • 具体工厂:提供了创建产品的方法,调用者通过调用不同的咖啡种类,来获取产品。
  • 新增咖啡,具体的工厂也需要进行修改

1.2 你有使用过简单工厂方法模式吗

在这里插入图片描述

工厂方法模式的主要角色:

  • 抽象工厂(Abstract Factory):提供了创建产品的接口,调用者通过它访问具体工厂的工厂方法来创建产品。
  • 具体工厂(ConcreteFactory):主要是实现抽象工厂中的抽象方法,完成具体产品的创建。
  • 抽象产品(Product):定义了产品的规范,描述了产品的主要特性和功能。
  • 具体产品(ConcreteProduct):实现了抽象产品角色所定义的接口,由具体工厂来创建,它同具体工厂之间-一对应。

调用关系
在这里插入图片描述

优点:

  • 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道产品的具体创建过程;
  • 在系统增加新的产品时只需要添加具体产品类和对应的具体工厂类,无须对原工厂进行任何修改,满足开闭原则;

缺点:

  • 每增加一个产品就要增加一个具体产品类和一个对应的具体工厂类,这增加了系统的复杂度。

1.3 你有使用过抽象工厂方法模式吗

抽象工厂模式是工厂方法模式的升级版本,工厂方法模式只生产一个等级的产品,而抽象工厂模式可生产多个等级的产品。一个超级工厂创建其他工厂。该超级工厂又称为其他工厂的工厂。

在这里插入图片描述
在这里插入图片描述

1.4 你有使用过策略模式吗

该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户。它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理。

策略模式的主要角色如下

  • 抽象策略(Strategy)类:这是一个抽象角色,通常由一个接口或抽象类实现。此角色给出所有的具体策略类所需的接口。
  • 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口,提供具体的算法实现或行为。
  • 环境(Context)类:持有一个策略类的引用,最终给客户端调用。

在这里插入图片描述

选择不同的策略模式进行调用
在这里插入图片描述

二、你们项目中是怎么使用设计模式的呢

2.1 策略模式+ 工厂模式 实现不同的方式的登录

根据不同的登录方式,选择不同的策略,如: 账号密码,验证码,微信扫码等。

  • 定义: login 接口
  • 3个实现:账号密码登录,验证码登录,微信扫码登录
  • 项目启动注入不同的登录方式的bean,定义根据不同登录方式返回对应的bean
  • 在登录controller 中根据不同的登录方式获取bean,然后进行登录;

2.1.1 定义一个登录的接口类

在这里插入图片描述

2.1.2 定义不同类型登录的具体实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

2.1.3 配置有哪些登录方式

在这里插入图片描述

2.1.4 项目启动获取到不同的登录方式bean

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

2.1.5 登录方法控制器进行不同方式的登录

在这里插入图片描述

2.2 责任链模式实现数据不同层面的验证

责任链模式:为了避免请求发送者与多个请求处理者耦合在一起,将所有请求的处理者通过前一对象记住其下一个对象的引用而连成一条链;当有请求发生时,可将请求沿着这条链传递,直到有对象处理它为止。

在这里插入图片描述
责任链模式的角色

  • 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。
  • 具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。
    -客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。
    在这里插入图片描述

2.2.1 定义抽象处理者

在这里插入图片描述

2.2.2 定义不同的验证

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

2.2.3 定义验证的数据

在这里插入图片描述

2.2.4 定义责任链调用

在这里插入图片描述


总结

本文对项目中经常使用到的设计模式进行总结。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1922554.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SCI一区级 | Matlab实现NGO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测

SCI一区级 | Matlab实现NGO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测 目录 SCI一区级 | Matlab实现NGO-CNN-LSTM-Mutilhead-Attention多变量时间序列预测预测效果基本介绍程序设计参考资料 预测效果 基本介绍 1.Matlab实现NGO-CNN-LSTM-Mutilhead-Attention北方苍鹰算…

怎么用PPT录制微课?详细步骤解析!

随着信息技术的不断发展,微课作为一种新型的教学形式,因其短小精悍、针对性强等特点,在教育领域得到了广泛的应用。而PPT作为一款常用的演示工具,不仅可以用来制作课件,还可以利用其内置的录屏功能或结合专业的录屏软件…

【机器学习】Exam4

实现线性不可分logistic逻辑回归 我们目前所学的都是线性回归,例如 y w 1 x 1 w 2 x 2 b y w_1x_1w_2x_2b yw1​x1​w2​x2​b 用肉眼来看数据集的话不难发现,线性回归没有用了,那么根据课程所学,我们是不是可以增加 x 3 x…

有必要把共享服务器升级到VPS吗?

根据自己的需求来选择是否升级,虚拟专用服务器 (VPS) 是一种托管解决方案,它以低得多的成本提供专用服务器的大部分功能。使用 VPS,您的虚拟服务器将与在其上运行的其他虚拟服务器共享硬件服务器的资源。但是,与传统的共享托管&am…

# Redis 入门到精通(一)数据类型(4)

Redis 入门到精通(一)数据类型(4) 一、redis 数据类型–sorted_set实现时效性任务管理 1、sorted_set 类型数据操作的注意事项 score 保存的数据存储空间是64位,如果是整数范围是-9007199254740992~9007199254740992…

内网对抗-基石框架篇域树林域森林架构信任关系多域成员层级信息收集环境搭建

知识点: 1、基石框架篇-域树&域林架构-权限控制-用户和网络 2、基石框架篇-域树&域林架构-环境搭建-准备和加入 3、基石框架篇-域树&域林架构-信息收集-手工和工具1、工作组(局域网) 将不同的计算机按照功能分别列入不同的工作组。想要访问某个部门的…

PostgreSQL 怎样处理数据仓库中维度表和事实表的关联性能?

文章目录 PostgreSQL 中维度表和事实表关联性能的处理 PostgreSQL 中维度表和事实表关联性能的处理 在数据仓库的领域中,PostgreSQL 作为一款强大的关系型数据库管理系统,对于处理维度表和事实表的关联性能是一个关键的问题。维度表和事实表的关联是数据…

基于B站视频评论的文本分析,采用包括文本聚类分析、LDA主题分析、网络语义分析

研究主题 本研究旨在通过对B站视频评论数据进行文本分析,揭示用户评论的主题、情感倾向和语义结构,助力商业决策。主要技术手段包括Python爬虫、LDA主题分析、聚类分析和语义网络分析。首先,利用Python爬虫采集大量评论数据并进行预处理。运…

Hadoop3:动态扩容之新增一台机器的初始化工作

一、需求描述 给Hadoop集群动态扩容一个节点 那么,这个节点是全新的,我们需要做哪些准备工作,才能将它融入集群了? 二、初始化配置 1、修改IP和hostname vim /etc/sysconfig/network-scripts/ifcfg-ens33 vim /etc/hostname2、…

激活交通运输创新活力 推进户外安全指数——北三车载终端TD3D:准确追踪 应急救援

根据交通运输部办公厅发布《关于充分发挥全国道路货运车辆公共监管与服务平台作用支撑行业高质量发展的意见》(下称《意见》)。《意见》提出,要持续拓展货运平台服务功能,加快推动北斗终端应用。 《意见》提出,加快单…

【eNSP模拟实验】单臂路由实现VLAN间通信

实验需求 如下图所示,辅导员办公室需要访问处在不同vlan的学生管理服务器的文件,那么如何实现两台终端相互通信呢?我们可以使用单臂路由的方式来实现。 单臂路由(router-on-a-stick)是指在路由器的一个接口上通过配置…

Hadoop-25 Sqoop迁移 增量数据导入 CDC 变化数据捕获 差量同步数据 触发器 快照 日志

章节内容 上节我们完成了如下的内容: Sqoop MySQL迁移到HiveSqoop Hive迁移数据到MySQL编写脚本进行数据导入导出测试 背景介绍 这里是三台公网云服务器,每台 2C4G,搭建一个Hadoop的学习环境,供我学习。 之前已经在 VM 虚拟机…

某某会员小程序后端性能优化

背景 某某会员小程序后台提供开放平台能力,为三方油站提供会员积分、优惠劵等api。当用户在油站加油,油站收银会调用我们系统为用户发放积分、优惠劵等。用户反馈慢,三方调用发放积分接口性能极低,耗时30s; 接口情况…

短视频SEO矩阵系统:源码开发与部署全攻略

在数字化时代,短视频已成为人们获取信息、娱乐休闲的重要方式。随着短视频平台的兴起,如何让自己的内容在众多视频中脱颖而出,成为每个创作者和内容运营者关注的焦点。本文将为您深入解析短视频SEO矩阵系统的源码开发与部署,助您在…

【原创教程】埃斯顿机器人:弯管机推力解决方式(上)

现的功能及应用的场合 本项目为弯管机设备改造工程,在不破坏设备原有的功能的情况下通过只更换设备原来的永宏PLC,使弯管机能够与埃斯顿机器人进行信号交互,通过机器人对弯管机进行上料、下料动作,即节约了人工成本,又提高了生产效率。 本文所述内容为“弯管机推力”的解决…

【设计模式】装饰模式

设计模式 【设计模式】工厂方法模式【设计模式】抽象工厂模式【设计模式】单例模式【设计模式】策略模式【设计模式】观察者模式【设计模式】装饰模式 一、介绍 装饰模式是一种结构型设计模式,它允许你通过将对象和对象装饰器分离来扩展对象的功能。装饰模式是一种动…

虚拟机vmware网络设置

一、网络分类 打开vmware workstation网络编辑器可以知道有三种网络类型,分别是:桥接模式、nat模式、仅主机模式。 1、桥接模式 桥接模式是将主机网卡与虚拟机虚拟的网卡利用虚拟网桥进行通信。在桥接的作用下, 类似于把物理主机虚拟为一个交换机, 所有设…

设计模式的七大原则

1.单一职责原则 单一职责原则(Single responsibility principle),即一个类应该只负责一项职责。如类A负责两个不同职责:职责1,职责2。当职责1需求变更而改变A时,可能造成职责2执行错误,所以需要将类A的粒度分解为A1、…

2-32 基于matlab的最小二乘估计递推算法

基于matlab的最小二乘估计递推算法,生成M序列,对参数估计值进行辨识,输出估计误差结果。程序已调通,可直接运行。 2-32 最小二乘估计递推算法 参数估计 - 小红书 (xiaohongshu.com)

C# Winform 系统方案目录的管理开发

在做一个中等复杂程度项目时,我们通常有系统全局配置,还要有对应的方案目录的管理和更新。 比如我们有如下需求:开发一个方案管理,可以新建、打开和保存方案,同时还需要保存方案中的各种文件。我设计的采用目录管理和…