-
本人做了之前做了护士站的欠费查询,由于系统新增了欠费配置,所以需要将欠费配置加到欠费查询中去,欠费规则的配置目前是科室级别的,但是考虑到规则配置范围会根据医院(规模大小-床位)的不同有所调整,想到了用策略模式。
。 -
策略模式跟跟工厂模式很像,都是继承和多态。策略是对行为的封装,而工厂是对对象的封装。欠费配置不稳定的是规则的使用范围,是行为,所以我采用策略模式
但是策略模式封装完行为后,发现一个致命问题,配置范围可大可小,最大的范围是全院范围,其次病区范围,然后科室范围。优先级理应由小到大科室>病区>全院。那就要写三个if,筛选病人类型又分正常病人,欠费病人以及全部病人,这样看起来,仅仅用策略模式封装,内部还是很复杂。假如要加一个分院概念,是不是要多一个全部院区的范围,亦或者医院的科室和病区没有上下级的关系,那每换一家医院都要重写一个算法。而且if嵌套太多,代码维护容易出错。
于是乎,我用了状态模式解耦配置范围的前后关系,一个范围一个类,他们共用一个基类,共同继承一个work的业务接口,这样,扩展一个新的范围,或者更改前后关系就会变得很方便。
但是美中不足的是业务核心的筛选病人类型还是写了三个if,于是我用病人类型的枚举和反射直接解耦业务核心判断。