java重点学习-设计模式

十三 设计模式

工厂模式:spring中使用(目的是:解耦

1.简单工厂

  • 所有的产品都共有一个工厂,如果新增产品,则需要修改代码,违反开闭原则·
  • 是一种编程习惯,可以借鉴这种编程思路

2.工厂方法模式

  • ·给每个产品都提供了一个工厂,让工厂专门负责对应的产品的生产,遵循开闭原则
  • · 项目中用的最多

3.抽象工厂方法模式

  • ·如果有多个纬度的产品需要配合生产时,优先建议采用抽象工厂(工厂的工厂)
  • 一般的企业开发中的较少

策略模式

13.1 简单工厂模式

13.2 工厂方式模式

13.3 抽象工厂模式

13.4 策略模式

  • 该模式定义了一系列算法,并将每个算法封装起来,使它们可以相互替换,且算法的变化不会影响使用算法的客户
  • 一个系统需要动态地在几种算法中选择一种时,可将每个算法封装到策略类中
  • 它通过对算法进行封装,把使用算法的责任和算法的实现分割开来,并委派给不同的对象对这些算法进行管理

策略模式的主要角色如下

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

13.5 登录案例(工厂模式+策略模式)

在getTypes中获取胚配置中所有的types,遍历后存入到Map中,

spring生命周期中有aware,此时提供applicationContext上下文对象,就会获取bean当如到Map的value中

完成 根据不同的参数完成不同的策略

1.其他案例(策略) 举一反三

  • 订单的支付策略(支付宝、微信、银行卡...)
  • 解析不同类型excel(xls格式、xlsx格式)
  • 打折促销(满300元9折、满500元8折、满1000元7折..)
  • 物流运费阶梯计算(5kg以下、5-10kg、10-0kg、20kg以上)

一句话总结:只要代码中有长的 if-else 或 switch 分支判断都可以采用策略模式优化

2.其他案例(工厂方法+策略)

  • 介绍业务(登录、支付、解析excel、优惠等级...)
  • 提供了很多种策略,都让spring容器管理
  • 提供一个工厂:准备策略对象,根据参数提供对象

13.6 责任链设计模式

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

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

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

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

相关文章

Transformer模型-5-Multi-Head Attention

上图红色圈中的部分为 Multi-Head Attention,是由多个Self-Attention组成的,虽然Encoder与Decoder中都有Multi-Head Attention,但他们略有区别。Encoder block包含一个 Multi-Head Attention, 而Decoder block包含两个 Multi-Head…

jenkins声明式流水线语法详解

最基本的语法包含 pipeline:所有有效的声明式流水线必须包含在一个 pipeline 块中stages:包含一系列一个或多个stage指令stage:stage包含在stages中进行,比如某个阶段steps:在阶段中具体得执行操作,一个或…

gcc配合cython编译python源代码

以前我们一般用Nuitka或者Pyinstaller来将python源码编译成二进制可执行文件。今天我们学习如何直接用gcc来编译。 很简单的一个python程序,结构如下。包含一个model.py和main.py 步骤1:处理main.py 处理main.py。即主程序入口 cython -D -2 --embe…

界面控件Telerik UI for WinForms 2024 Q3概览 - 支持合并单元格等

Telerik UI for WinForms拥有适用Windows Forms的110多个令人惊叹的UI控件。所有的UI for WinForms控件都具有完整的主题支持,可以轻松地帮助开发人员在桌面和平板电脑应用程序提供一致美观的下一代用户体验。 本文将介绍界面组件Telerik UI for WinForms在今年第一…

Linux 系统进程理解——标识符,状态

目录 进程描述-pcb 并行与并发 概念: 课本概念:程序的一个执行实例,正在执行的程序等 内核观点:担当分配系统资源(CPU时间,内存)的实体 这短短的两行就概括了进程,但是进程的内在…

一个能同时to B和to C、批发零售一体化的需求分析和系统设计

一些企业纠结自己的模式是to B还是to C,一些企业在to B和to C中转型,还有一些企业在做着to B的业务,也在做to C的代发,这些企业在不停地变更着业务,更换着系统,给企业带来巨大的资金和时间成本,…

21、Tomato

难度 低(个人认为中) 目标 root权限 一个flag 使用VMware启动 kali 192.168.152.56 靶机 192.168.152.66 信息收集 端口信息收集 可以看到有个ftp服务,2211实际是ssh协议端口,80、8888是一个web服务 web测试 80端口显示一个tomato 查看源码给了一些…

grafana 使用常见问题

一、点击 panel 没有反应,没有出现 edit 选项。 方法一 将鼠标放在 panel 的任意位置,然后键盘输入 "e",然后再次点击 title,即可出现选项框。 方法二 F12 查看当前 panel id,然后在浏览器 url 地址上拼接…

技术成神之路:设计模式(十四)享元模式

介绍 享元模式(Flyweight Pattern)是一种结构性设计模式,旨在通过共享对象来有效地支持大量细粒度的对象。 1.定义 享元模式通过将对象状态分为内部状态(可以共享)和外部状态(不可共享)&#xf…

Godot游戏如何提升触感体验

在游戏世界中,触感体验至关重要,既能极大提升玩家沉浸感,让其深度融入游戏,在操作角色或与环境互动时,通过触感反馈获得身临其境的真实感(比如动作游戏中角色攻击或受击时的振动反馈,能使玩家更…

STM8L101低功耗的理解

一.通过降低时钟频率来降低功耗: 规格书如图 1.code 从flash启动,主频率是16Mhz时,功耗测量2.51ma左右,对应程序如下: 2.code从flash启动,主频率是2Mhz时(上电默认值),功…

视频美颜SDK核心功能解析:打造高效直播美颜工具方案详解

随着直播行业的迅猛发展,用户对于直播画质和个人形象的要求越来越高。视频美颜SDK作为一项关键技术,已经成为各大直播平台和短视频应用的重要组成部分。通过实时美颜技术,用户能够在直播过程中呈现出更加理想的形象,从而提升直播体…

【计算机网络篇】物理层

本文主要介绍计算机网络第二章节的物理层,文中的内容是我认为的重点内容,并非所有。参考的教材是谢希仁老师编著的《计算机网络》第8版。跟学视频课为河南科技大学郑瑞娟老师所讲计网。 文章目录 🎯一.基本概念及公式 🎃基本概念…

推荐系统-电商直播 多目标排序算法探秘

前言: 电商直播已经成为电商平台流量的主要入口,今天我们一起探讨推荐算法在直播中所面临的核心问题和解决方案。以下内容参考阿里1688的技术方案整理完成。 一、核心问题介绍 在电商网站中,用户的主要行为是在商品上的行为,直播…

STM32G431RBT6(蓝桥杯)串口(发送)

一、基础配置 (1) PA9和PA10就是串口对应在单片机上的端口 注意:一定要先选择PA9的TX和PA10的RX,再去打开异步的模式 (2) 二、查看单片机的端口连接至电脑的哪里 (1)此电脑->右击属性 (2)找到端…

轻量级RSS阅读器Fusion

什么是 Fusion ? Fusion 是一款轻量级、自托管的 RSS 聚合器和阅读器。 软件主要特点: 自动分组、书签、搜索、嗅探信息导入/导出 OPML 文件支持 RSS、Atom、JSON 类型的 feed响应式、明/暗模式、PWA轻量级,自托管友好 使用 Golang 和 SQLit…

c语言面试字符串复制

1&#xff0c;下面这个函数的打印是什么&#xff1a; #include<stdio.h> #include<string.h>int main() {char str0[5], str1[] "welcome";strcpy(str0, str1);printf("str0:%s\r\n",str0);printf("str1:%s\r\n",str1); } larkla…

Linux:虚拟文件系统/proc和self进程

相关阅读 Linuxhttps://blog.csdn.net/weixin_45791458/category_12234591.html?spm1001.2014.3001.5482 /proc目录 在Linux操作系统中&#xff0c;目录/proc是一个虚拟文件系统&#xff0c;称为procfc&#xff0c;用于访问内核和系统的实时状态信息。这个文件系统不同于常规…

java-----IDE(集成开发环境)

IDE&#xff08;集成开发环境&#xff09; IDE&#xff08;集成开发环境&#xff09;-IDEA IDEA 介绍 1) IDEA 全称 IntelliJ IDEA2) 在业界被公认为最好的Java开发工具3) IDEA是JetBrains 公司的产品&#xff0c;总部位于捷克的首都布拉格4) 除了支持Java开发&#xff0c;还…

国标GB28181视频融合监控汇聚平台的方案实现及场景应用

Liveweb国标视频融合云平台基于端-边-云一体化架构&#xff0c;部署轻量简单、功能灵活多样&#xff0c;平台可支持多协议&#xff08;GB28181/RTSP/Onvif/海康SDK/Ehome/大华SDK/RTMP推流等&#xff09;、多类型设备接入(IPC/NVR/监控平台)&#xff0c;在视频能力上&#xff0…