第三周总结
这周是对设计模式的一个介绍和时间. 课程设置上是上周SOLID原则的一个延续.
设计模式 Design Pattern 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解并且保证代码可靠性。
设计模式有很多种,有的23种,甚至有43种的说法,但是我觉得不必每种都背下来,当成八股文.
基于对业务的理解,未必只有唯一一种模式是正确的
拘泥于每种模式的精确定义我觉得大可不必,最终的目的还是写出高内聚,低耦合的代码,写出美的代码.
不过熟悉几种常见的模式,灵活运用还是必须的.
我基于最近做的一个需求,讲讲我如何运用设计模式,也是对此的一个梳理.
需求背景:
系统中的数据缓存有2中过期策略,一个是固定时间过期(45分钟),另外一个是查询数据的更新时间,结合缓存的创建时间进行判断(更新时间>创建时间则数据过期). 现在这两种策略过于粗糙,现在需要增加几种新的策略去进行过期.
将缓存中的数据进行分类,不同类别的数据对缓存时间的敏感性不同,需要不同的策略,策略有好几种,比如说数据中增加字段表示期望过期时间,根据数据中的库存字段决定过期时间(库存越少越快过期), 不同商家的数据期望不同的过期时间等等
设计方案
这个需求也不复杂,就是期望增加几种过期策略
但是显然可以用上好几种设计模式
1.根据不同数据,使用不同的过期策略,显然可以用工厂模式,创建不同的过期策略实现类
2使用不同的策略,显然可以用上策略模式
3.策略之间的关系有排斥,有非排斥的. 同一种数据可以用上好几种策略,固定时间, 根据库存判断,查询更新时间等等,这些可以同时使用的又可以用上组合模式.结果取这些过期策略计算结果的最小值
随便一个需求就可以用上3种设计模式,当然,附加上一些非功能性需求,比如我需要记监控,统计这些策略的覆盖度如何, 我可以用上观察者模式, 在组合的策略中增加一个观察者,观察具体使用了哪种策略,这样我就可以干记监控等事情. 这样就是4种设计模式
我认为不需要刻意的把代码往23种设计模式上套,重要的是考虑场景,要对需求的场景抽象,写代码的时候问自己有没有遵守SOLID原则,如果有不符合的地方,才应该考虑一些新的设计,在众多的设计模式中找符合自己场景的.
评论