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)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程
相关推荐
bing_158几秒前
Java 中求两个 List集合的交集元素
java·list
工业互联网专业19 分钟前
基于springboot+vue的高校社团管理系统的设计与实现
java·vue.js·spring boot·毕业设计·源码·课程设计
九圣残炎21 分钟前
【ElasticSearch】 Java API Client 7.17文档
java·elasticsearch·搜索引擎
Icoolkj42 分钟前
微服务学习-SkyWalking 实时追踪服务链路
学习·微服务·skywalking
李匠20241 小时前
云计算架构学习之LNMP架构部署、架构拆分、负载均衡-会话保持
学习·架构·云计算
dal118网工任子仪1 小时前
73,【5】BUUCTF WEB [网鼎杯 2020 玄武组]SSRFMe(未解出)
笔记·学习
m0_748251521 小时前
Ubuntu介绍、与centos的区别、基于VMware安装Ubuntu Server 22.04、配置远程连接、安装jdk+Tomcat
java·ubuntu·centos
Bro_cat1 小时前
深入浅出JSON:数据交换的轻量级解决方案
java·ajax·java-ee·json
等一场春雨2 小时前
Java设计模式 五 建造者模式 (Builder Pattern)
java·设计模式·建造者模式
hunzi_12 小时前
Java和PHP开发的商城系统区别
java·php