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)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程
相关推荐
minDuck1 分钟前
ruoyi-vue集成tianai-captcha验证码
java·前端·vue.js
王俊山IT17 分钟前
C++学习笔记----10、模块、头文件及各种主题(一)---- 模块(5)
开发语言·c++·笔记·学习
为将者,自当识天晓地。19 分钟前
c++多线程
java·开发语言
daqinzl27 分钟前
java获取机器ip、mac
java·mac·ip
激流丶43 分钟前
【Kafka 实战】如何解决Kafka Topic数量过多带来的性能问题?
java·大数据·kafka·topic
Themberfue1 小时前
Java多线程详解⑤(全程干货!!!)线程安全问题 || 锁 || synchronized
java·开发语言·线程·多线程·synchronized·
让学习成为一种生活方式1 小时前
R包下载太慢安装中止的解决策略-R语言003
java·数据库·r语言
Mephisto.java1 小时前
【大数据学习 | kafka高级部分】kafka中的选举机制
大数据·学习·kafka
晨曦_子画1 小时前
编程语言之战:AI 之后的 Kotlin 与 Java
android·java·开发语言·人工智能·kotlin
南宫生2 小时前
贪心算法习题其三【力扣】【算法学习day.20】
java·数据结构·学习·算法·leetcode·贪心算法