以前听别人分享,在讲设计模式时提到过变化方向这个词。
意思是,在构思模式时,需要首先看清楚程序已经存在以及可能存在的变化方向,使用合适的设计模式将这些变化方向解藕。
原来听的时候迷迷糊糊,如何定义变化方向,怎么识别可能的变化方向。
今天突然好像明白了。
我们不提设计模式怎么解藕变化方向,先解决变化方向是什么。
- 假如程序中有一个很简单的获取时间的功能GetTime, 那它不需要设计模式介入。
- 过了一个月, 小明向GetTime功能中添加了一个逻辑,根据区域获取不同的时区时间:
if (zone=’CN')
time += 8h;
- 这就是一个变化方向,将时区这个变化方向和获取时间耦合在了一起。
- 又过了一个月,小刚向GetTime功能中添加了一个逻辑,有些人想获取10分钟后的时间(可能是想督促自己早点干完活:)):
if (needDelay)
time += 10m;
-
这又是一个变化方向,将延迟时间这个变化和获取时间耦合在一起。
-
现在GetTime这个函数不简单了,里面包含了怎么区分时区,怎么区分延迟。每新增一种时区或者新增一种延迟,都需要考虑对另一个变化方向的波及,并且可能需要重复多份代码。我们的代码就是这样一点一点变得长而丑陋。
-
要解决这个问题, 就要将zone和needDelay这两个变化方向对GetTime隐藏起来。可以在初始化每个实例的时候,给它不同的GetTime实现,而对每一个实例而言,它看到的只是简单的一个GetTime,并不知道底层怎么处理区域,怎么处理延迟等等。
我的突然的一点想法,不知道大家能不能理解。。。。
网友评论