状态模式
允许在运行时修改对象的行为或状态,每个行为用一个状态类表达。状态对象通常不包含任何属性,状态改变时修改状态对象。
通常用法是:一个状态的接口(其中有状态转移的方法)其有多种实现,再建立一个类接受外部的输入,再委托给状态类实现状态的转移。
在实验3中,通过状态模式实现了不同计划项状态的转换。通过状态模式很好的实现了状态转换。
备忘录模式
caretaker:添加备忘录记录和恢复,保留一个备忘录列表,提供添加返回备忘录的方法。这一个类是客户端用于管理备忘录的类
Originator:需要备忘的类,其需要实现一个返回备忘录的方法。
Memento:备忘录,记录originator对象的历史状态。
语法驱动的构造
这一部分需要掌握的内容为:
(1)语法的组成:一个语法树是由终止节点和非终止节点构成的
(2)语法中的操作符:*、|、连接、+、?。以及他们的优先级为 *、?、+优先级最高,连接次之,|最低。
(3)语法中的递归,例如hostname::=‘word’|hostname,这样的形式为递归的形式
(4)Markdown和HTML:需要掌握他们的区别,Markdown不支持标记的嵌套,所谓嵌套即两个产生式中你中有我我中有你。
(5)正则表达式
正则语法:简化之后可以表达为一个产生式而不包含非终止节点。在正则表达式中,很多的符号要通过\进行转义,如果在java中转义则需要\。
上下文无关文法:左侧只含有一个非终结符,他定义的语法范畴是完全独立于这种范畴可能出现的环境,无需考虑上下文。
(6)在java中使用正则表达式
pattern对象是对正则表达式进行编译后得到的结果。
matcher对象:利用pattern对输入字符串进行解析。
greedy:匹配器被强制要求第一次尝试匹配时读入整个输入串,如果第一次尝试匹配失败,则从后往前逐个字符的回退并尝试再次匹配。
reluctant:从首位置开始,在尝试匹配时值勉强读入一个字符,知道尝试完整个字符串。
possessive:直接匹配整个字符串,完全比配则成功,否则失败