摘要:数学表达式的数值支持小数,符号只支持+ - * / ( )这几种。先将数学表达式的字符串(中缀表达式)转化为**后缀表达式**,然后计算后缀表达式的值。例:中缀表达式“9+(3-1)*3+10/2”转化为后缀表达式“9 3 1-3*+ 10 2/+”。 阅读全文
posted @ 2020-09-18 10:54 time-flies 阅读(26) 评论(0) 推荐(1) 编辑
摘要:算法代码:index = (index + 1) % arr.Length; 算法实现:记录目标数组及当前索引,当前索引初始值为-1;当前索引=(当前索引 + 1) 取模;访问目标数组内当前索引位置的值。 阅读全文
posted @ 2020-09-17 11:18 time-flies 阅读(32) 评论(0) 推荐(0) 编辑
摘要:算法实现:利用格式化输出把数字中间按顺序插入大写字母,把相邻的大写字母替换为空字符,最后把数字和字母替换成中文(字母替换为数字的十进制数位的中文名称)。 阅读全文
posted @ 2020-09-15 11:55 time-flies 阅读(68) 评论(4) 推荐(0) 编辑
摘要:本标准原则上适用于所有类型的软件产品的开发过程和管理过程。 使用者可根据实际情况对本标准进行适当剪裁(可剪裁所需的文档类型,也可对规范的内容作适当裁剪)。 软件文档从使用的角度大致可分为软件的用户需要的用户文档和开发方在开发过程中使用的内部文档(开发文档)两类。供方应提供的文档的类型和规模,由软件的需方和供方在合同中规定。 阅读全文
posted @ 2020-09-10 10:58 time-flies 阅读(12) 评论(0) 推荐(0) 编辑
摘要:在软件开发中,会遇到有些问题多次重复出现,而且有一定的相似性和规律性。如果将它们归纳成一种简单的语言,那么这些问题实例将是该语言的一些句子,这样就可以用“编译原理”中的解释器模式来实现了。 虽然使用解释器模式的实例不是很多,但对于满足以上特点,且对运行效率要求不是很高的应用实例,如果用解释器模式来实现,其效果是非常好的,本文将介绍其工作原理与使用方法。 解释器(Interpreter)模式的定义:给分析对象定义一个语言,并定义该语言的文法表示,再设计一个解析器来解释语言中的句子。也就是说,用编译语言的方式来分析应用中的实例。这种模式实现了文法表达式处理的接口,该接口解释一个特定的上下文。 阅读全文
posted @ 2020-09-09 09:55 time-flies 阅读(18) 评论(0) 推荐(0) 编辑
摘要:每个人都有犯错误的时候,都希望有种“后悔药”能弥补自己的过失,让自己重新开始,但现实是残酷的。在计算机应用中,客户同样会常常犯错误,能否提供“后悔药”给他们呢?当然是可以的,而且是有必要的。这个功能由“备忘录模式”来实现。 其实很多应用软件都提供了这项功能,如 Word、记事本、Photoshop、Eclipse 等软件在编辑时按 Ctrl+Z 组合键时能撤销当前操作,使文档恢复到之前的状态;还有在 IE 中的后退键、数据库事务管理中的回滚操作、玩游戏时的中间结果存档功能、数据库与操作系统的备份操作、棋类游戏中的悔棋功能等都属于这类。 备忘录模式能记录一个对象的内部状态,当用户后悔时能撤销当前操作,使数据恢复到它原先的状态。 备忘录(Memento)模式的定义:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态,该模式又叫快照模式。 阅读全文
posted @ 2020-09-09 08:53 time-flies 阅读(19) 评论(0) 推荐(0) 编辑
摘要:在现实生活中,有些集合对象中存在多种不同的元素,且每种元素也存在多种不同的访问者和处理方式。例如,公园中存在多个景点,也存在多个游客,不同的游客对同一个景点的评价可能不同。 这些被处理的数据元素相对稳定而访问方式多种多样的数据结构,如果用“访问者模式”来处理比较方便。 访问者模式能把处理方法从数据结构中分离出来,并可以根据需要增加新的处理方法,且不用修改原来的程序代码与数据结构,这提高了程序的扩展性和灵活性。 访问者(Visitor)模式的定义:将作用于某种数据结构中的各元素的操作分离出来封装成独立的类,使其在不改变数据结构的前提下可以添加作用于这些元素的新的操作,为数据结构中的每个元素提供多种访问方式。它将对数据的操作与数据结构进行分离,是行为类模式中最复杂的一种模式。 阅读全文
posted @ 2020-09-08 16:34 time-flies 阅读(22) 评论(0) 推荐(0) 编辑
摘要:现实生活以及程序设计中,经常要访问一个聚合对象中的各个元素,如“数据结构”中的链表遍历,通常的做法是将链表的创建和遍历都放在同一个类中,但这种方式不利于程序的扩展,如果要更换遍历方法就必须修改程序源代码,这违背了 “开闭原则”。 既然将遍历方法封装在聚合类中不可取,那么聚合类中不提供遍历方法,将遍历方法由用户自己实现是否可行呢?答案是同样不可取。 “迭代器模式”能较好地克服以上缺点,它在客户访问类与聚合类之间插入一个迭代器,这分离了聚合对象与其遍历行为,对客户也隐藏了其内部细节,且满足“单一职责原则”和“开闭原则”。 迭代器(Iterator)模式的定义:提供一个对象来顺序访问聚合对象中的一系列数据,而不暴露聚合对象的内部表示。 阅读全文
posted @ 2020-09-08 15:08 time-flies 阅读(16) 评论(0) 推荐(0) 编辑
摘要:在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是“网状结构”,它要求每个对象都必须知道它需要交互的对象。 如果把这种“网状结构”改为“星形结构”的话,将大大降低它们之间的“耦合性”,这时只要找一个“中介者”就可以了。 在软件的开发过程中,这样的例子也很多,例如,在 MVC 框架中,控制器(C)就是模型(M)和视图(V)的中介者;还有大家常用的 QQ 聊天程序的“中介者”是 QQ 服务器。 中介者(Mediator)模式的定义:定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。 阅读全文
posted @ 2020-09-07 17:13 time-flies 阅读(24) 评论(0) 推荐(0) 编辑
摘要:在现实世界中,许多对象并不是独立存在的,其中一个对象的行为发生改变可能会导致一个或者多个其他对象的行为也发生改变。例如,某种商品的物价上涨时会导致部分商家高兴,而消费者伤心。 在软件世界也是这样,例如,事件模型中的事件源与事件处理者。所有这些,如果用观察者模式来实现就非常方便。 观察者(Observer)模式的定义:指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,它是对象行为型模式。 阅读全文
posted @ 2020-09-07 15:52 time-flies 阅读(13) 评论(0) 推荐(0) 编辑