Java设计模式

设计模式:人们在面对同类型软件工程设计问题所总结出的一些有用经验,是某类问题的通用设计解决方案。

一、策略模式

策略模式(Strategy Pattern) 是一种行为设计模式,它定义了一系列算法,将每个算法封装起来,使它们可以互换使用,策略模式让算法的变化独立于使用算法的客户端。

策略模式的核心思想:

  • 将"变化的算法"抽象出来 ,形成一个策略接口(Strategy)(或抽象类)。
  • 每种具体算法实现该接口 ,成为具体的策略类(ConcreteStrategy)。
  • 上下文(Context)持有策略接口的引用,负责与客户端交互,动态切换具体策略。

策略模式的工作流程

  1. 客户端创建具体策略对象。
  2. 客户端将具体策略对象传入上下文。
  3. 上下文通过策略接口调用具体策略的算法(无需关心具体是哪种策略)。
  4. 若需切换算法,只需替换上下文持有的具体策略对象。

策略模式的优点:

  1. 开闭原则:可以轻松添加新策略,无需修改现有代码

  2. 避免多重条件语句:代替大量的if-else或switch-case语句

  3. 算法复用:可以在系统的不同部分复用相同的策略

  4. 算法独立:将算法实现与使用算法的代码分离

策略模式的缺点:

  1. 客户端必须了解不同策略:客户端需要知道哪些策略可用,不同策略的区别,才能正确选择

  2. 策略间的通信:策略之间无法直接共享数据

应用场景:

策略模式特别适合需要动态选择算法或行为的场景。

  1. 支付系统:电商平台的支付方式选择(支付宝、微信支付、银行卡支付)

  2. 排序算法:根据需要选择冒泡排序、快速排序、归并排序等

  3. 压缩算法:ZIP、RAR、7Z等不同压缩格式

  4. 导航系统:根据不同条件选择最短路径、最快路径、最少收费路径

二、工厂模式

简单工厂模式:定义一个创建对象的类,由这个类来封装实例化对象的行为

工厂方法模式:定义一个创建对象的抽象方法,由子类决定要实例化的类,将对象的实例化推迟到子类

抽象工厂模式:定义一个接口用于创建相关或有依赖关系的对象族,而无需明确指定具体类

依赖抽象原则:

  • 变量不要持有具体类的引用
  • 不要让类继承自具体类,要继承自抽象类或接口
  • 不要覆盖基类中已实现的方法
相关推荐
努力的lpp2 小时前
php反序列化一(大白话版)
开发语言·web安全·php·ctf·反序列化
菜鸟~noob2332 小时前
【电子战】第03篇:CFAR(恒虚警)处理【含matlab代码】
开发语言·matlab
lhldsg3 小时前
全民健身解决方案小程序开发:从0到1的技术实战
java·数据库·需求分析
jason成都3 小时前
Spring WebFlux 适配达梦新方案|dm‑r2dbc:Netty 异步传输的实验性 R2DBC 驱动
java·后端·spring
泡海椒3 小时前
内置SPI函数库详解:JQuick-Java Builtin工具类实战用法
java·开发语言·python
hqyjzsb3 小时前
零 AI 项目经验,学 Python 转型 AI 的正确顺序是什么?
开发语言·人工智能·python·算法·职场和发展·数据挖掘·数据分析
辰烨chenye3 小时前
LeetCode Hot 100 题解 · 二分篇
java·算法·leetcode
小羊没烦恼!4 小时前
Hello Web API系列教程——Web API与国际化
java·服务器·前端·javascript·php
Keven_114 小时前
算法札记:ACM适用的很骚的C++语法(持续更新)
开发语言·c++
脉动数据行情14 小时前
C# 实现德指 DAX 期货 WebSocket 实时行情监听
开发语言·websocket·c#