5-3 面向可维护性的构造技术

一、基于状态的编程

1、状态模式

对象有一个状态属性,并且可以变化。

形式如下,context是某一个对象,它有属性state(状态),状态在一定的条件下会跳转至另一状态;用一个State接口来表示状态、定义状态间的转换:
在这里插入图片描述

举个例子,下图是一个有状态的ADT,他可以变换自己的状态(move):
在这里插入图片描述

状态类如下,每一个状态继承一个状态接口,有状态转换(move)、是否接收状态(accept)方法:
在这里插入图片描述

注意,这里的状态类使用单例模式:1、构造函数要是private的;2、变量是静态的。

2、备忘录模式

记录某对象的历史状态,以便于“回滚”。

形式如下,一个目标ADT(Originator),需要记录它的各个状态;一个Memento了,这个类记录状态;Caretaker负责管理各个历史状态:
在这里插入图片描述
举个例子,originator类如下,它可以保存状态(创建一个Memento)、恢复到过去的某个状态(restore):
在这里插入图片描述
memento类如下,记录某一时刻的状态:
在这里插入图片描述
caretaker类如下,管理一系列的历史状态:
在这里插入图片描述
客户端代码如下:
在这里插入图片描述
二、基于语法的构造

使用语法判断字符串是否合法。

1、语法的构成

由非终止节点和终止节点构成,非终止节点可以派生出新的字符串,例如下图的hostname就是非终止节点,’mit.edu’等就是终止节点:
在这里插入图片描述
2、语法操作符

最基础的仨:
在这里插入图片描述
高级一点的:“?”代表0个或1个;“+”代表一个或多个;“[…]”代表这个范围的字符,例如[a-c]代表a、b、c,[ae]代表a、e;“[^…]”代表不在这里的字符,例如[^a-c]代表除了abc之外的字符。

3、语法中的递归、语法解析树

语法可以为递归的形式,如下图的hostname即是递归的:
在这里插入图片描述
其语法树形式如下:
在这里插入图片描述
以MarkDown语言和HTML语言为例,MarkDown语言中,被两个“_”夹在中间的字符串会被解析成斜体;HTML语言中,被<i>和</i>夹在中间的是斜体,其语法规则、语法树如下:
在这里插入图片描述
4、正则语法

如果一个语法规则可以被表示为一个产生式并且不包含任何非终止节点,这就是正则语法。例子如下,下图的url可以被一句不含非终止节点的表达式表示,故是正则的:
在这里插入图片描述
正则表达式就是去掉了普通表达式的空格和引号,变得更简洁、难懂,举个例子,如果想要去掉下图中所有被含有<>的字符串:
在这里插入图片描述
可以这样构造regex:
在这里插入图片描述
正则表达式中有一些特殊意义的字符,例如”.”,可以代表任意一个字符。当想要在正则表达式中匹配“.”这个字符的话,需要在前面加上“\”。

正则表达式中一些简写:
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值