码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • 面试篇-Java-5+设计模式


    文章目录

    • 前言
    • 一、你知道工厂方法模式吗
      • 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 定义责任链调用

    在这里插入图片描述


    总结

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

  • 相关阅读:
    流量主如何在广告收益和用户体验中找到平衡
    计算机Android毕业设计论文基于Uniapp+SSM实现的Android安全网购平台
    InputMethodManagerService启动-Android12
    解决跨域问题
    【电机控制】PMSM无感foc控制(二)PID控制(附大厂C源码)
    Node.js crypto模块 加密算法
    .NET 简介:跨平台、开源、高性能的开发平台
    antd 表单校验问题记录&解决方案
    【强化学习论文合集 | 2018年合集】一. ICML-2018 强化学习论文
    基于Java毕业设计致一企业网站源码+系统+mysql+lw文档+部署软件
  • 原文地址:https://blog.csdn.net/l123lgx/article/details/140187123
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号