设计模式应用:状态模式

在实际的开发中会遇到很多涉及状态变更的情况,如电梯、商品、订单,另外像编译器实现中代码的解析也是一个状态机的实现。对于这些牵扯到状态变更的情况,你当然也可以使用各种switch……case,if else的组合来实现,但是这样子就不符合开闭原则了(说人话=。=,也即会把代码搞得很乱,降低效率,而且不易于扩展,后续如果要加一个状态,这里得改,那里也得改,对于维护这种代码,说多了都是泪)。

 

这里以一个简单的订单状态变更为例,其状态转换如:

下单——>(付款)——[......]

Read more

Posted in 算法 | Tagged | Leave a comment

设计模式应用:访问者模式

1. 写在前面

从读书时代到现在(貌似中间只有两个月=。=),陆陆续续学过设计模式很多次,也看过很多相关的书,从经典的GOF设计模式,到大话设计模式等等,但是到最后还是会发现,自己貌似除了对比较常见、常用的工厂、观察者、命令、访问者等几个设计模式能直接应用外,其它的都只能有个模糊的印象。

 

2. 访问者模式概念(visit模式)

采用”GOF设计模式“中的方法,要描述一个设计模式需要从几个方面出发:意图、别名、动机、适用性、结构等等,在这里,我们只提供几个东西[......]

Read more

Posted in 算法 | Tagged | Leave a comment

字符串相似度计算

       字符串相似度计算是查找两个字符串的公共子串,利用公共子串的长度根据相应的公式来衡量两个字符串的相似程度。字符串相似度计算算法很多,如LCS算法、Levenshtein Distance算法、Heckel算法、GST算法等。对于历经N次笔试面试的人来说,这个再熟悉不过了。应要求,要帮忙写个计算两字符串相似度的算法,所以我特意去看了篇论文,并据此实现LCS与GST算法。
1. 概念
       LCS(最长公共子序列)算法是将两个给定字符串分别删去0个或多个字符,但不改变剩余[......]

Read more

Posted in 算法 | Tagged , , | Leave a comment