当前位置: 首页 > news >正文

组合模式计算多项式

代码参考:https://github.com/implement-study/composite_demo

一. 组合模式

在我看来组合模式和装饰器模式的区别是:组合模式肚子里有一大堆同类的对象,而装饰器模式肚子里只有一个同类对象。

二. 类图

在这里插入图片描述

三. 代码分析

1. 中缀表达式转后缀表达式

其核心思想是新建一个操作符栈,遍历中缀表达式,当遇到操作符时,首先判断该操作符的优先级是否高于当前栈顶的操作符的优先级,如果高于,则入栈,否则一直弹出元素加入到中缀表达式中,直至当前栈顶元素的优先级地域该操作符的优先级。
具体而言:

  • 当遇到 ( 时,直接入栈
  • 当遇到 ) 时,弹出元素直到遇到 (
  • 当遇到 +- , 一直弹出高优先级的运算符(+,-,*,\)加入到中缀表达式中,然后压入栈中。
  • 当遇到 */,一直弹出高优先级的运算符(*,\,)加入到中缀表达式中,然后压入栈中。
  • 遇到数字时,直接加入到中缀表达式中。

最后弹出栈中的元素放入到中缀表达式中。
注意:使用java的LinkedList来模拟栈时,统一使用removeLast()和addLast()来模拟,不要混用pop()和push(),这两个操作都是操作LiinkedList的头元素的。

在这里插入图片描述

2. 计算值

得到后缀表达以后,接下来就是新建一个Expression栈,遍历中缀表达式

  • 遇到符号时,从Expression栈中弹出左右元素,然后新建BinaryExpression对象压入栈中
  • 遇到数字时,新建NumberExpression对象压入栈中。

组合模式通过定义统一的接口,将多项式的叶子节点(如常数项、变量项)和组合节点(如加法、乘法表达式)视为同一类对象。方便扩展。(其实到这里为止,并没有完全凸显组合模式的优点,如果再拓展到变量项将会有另一番感受)

在这里插入图片描述

相关文章:

  • 【MYSQL从入门到精通】数据库基础操作、数据类型
  • 数据结构 -- 图的遍历
  • 文件操作和IO - 2
  • Model Context Protocol(MCP)模型上下文协议
  • spark core编程之行动算子、累加器、广播变量
  • 在51单片机上实现平滑呼吸灯:50us定时器PWM实战指南
  • Shell脚本提交Spark任务简单案例
  • Java基础 4.12
  • 《jQuery EasyUI 插件》
  • Linux基础5
  • 【数据结构与算法】ArrayList 和 顺序表
  • Python进阶(3):函数(接上篇)
  • Linux基础8
  • Linux磁盘大师:存储管理完全指南
  • Redis 哨兵模式 搭建
  • PDF 转换为 Word、HTML、LaTeX 和 Markdown 格式
  • TDengine 语言连接器(C/C++)
  • 智能手机功耗测试
  • jxls2.10实现模板导出/单元格合并/自定义标签实现单元格隐藏
  • 为什么ASCII的A是65[特殊字符]
  • 怎么才能知道网站是谁做的/专业推广公司
  • 学做网站制作/seo优化论坛
  • 建设网站怎么做/班级优化大师官方网站
  • 系统下载官网/杭州上城区抖音seo有多好
  • 石狮app网站开发价格/流量平台
  • 男男做的视频网站/免费h5制作网站