装饰者模式解决的问题:解决了新增功能场景下需要在原有的代码上修修改改问题
核心:将已经写的模块功能作为一个方法提供者看待,新功能就新写方法,将这块function编排进去即可(通过继承)
场景小示例:
第一天:产品提了个需求,用户的权限生效的时候需要给用户发送短信通知
我:ok,小问题,写完了
第二天:同时要发送wx公众号通知
我:好的
第三天:再加个日志记录
我:??,我的这个类的代码好像成了一坨
对于第一天的需求,我写了如下代码:
第二天,第三天,又加功能了,而且是一块一块的大逻辑,那就将前一天写的功能理解为一个功能块,我新写的功能块中调用原有的功能块,顺序也可以自己控制。
考虑开闭原则,新建了装饰类的interface,继承了MessageService
然后发送wx公众号的实现在此装饰类下做实现
重点来了,如何复用第一天已经写的功能模块的功能呢?答案是直接继承过来,哈哈
然后就是super做调用,下面再做新的逻辑
当然,如果新的逻辑优先级在发送手机短信之上,那么调整代码顺序即可,还是好使的
测试下看看,没毛病