这个会员需求这样该怎么设计
什么是设计模式,为什么要使用设计模式?
这次遇到了什么问题?
有一个需求要求普通用户和会员用户启动设备的时候时间、计费和使用次数不一样。
-
普通用户使用设备按时长计费,比如一分钟1元钱,可以随便使用反正按时长计费。 会员用户每天可以免费使用45分钟,时间到了就停止,下一次启动设备就跟普通用户一样。 会员用户中又分为月卡会员,年卡会员等。
这个问题怎么去设计解决了?
第一时间想到的就是直接判断是什么用户,会员还是普通用户,是月卡会员还是年卡会员…这样走下去。
但是这样存在什么问题呢 ?
-
if判断很多嵌套,逻辑理解复杂度很大。 以后拓展的时候不好拓展,比如又加了一个某某卡用户,又得在哪里加判断逻辑。 会员用户下又分了月卡和年卡,那以后再分卡呢?月卡和年卡的权益或者功能不同的情况,比如年卡可以用60分钟。
上面的这些问题是我当时想到的,虽然需求没有,过度设计是不好的。但是如果真按这样走下去有什么好点的方法让代码具有好的扩展性。
用了什么设计模式?
-
用户分了普通用户和会员用户。感觉可以用策略来解决。 会员用户下面又有月卡会员和年卡会员,那么后续还可能在往下分。这里又是策略。 还有一点,需要先知道是不是会员,是的话,再看是不是什么类型的会员一直往下走。这里像不像filter过滤器的作用?感觉可以用责任链。
像不像这样一棵树:
这样的结构使用一种责任树的算法设计模式 。
什么是策略设计模式,什么是责任链设计模式?
**主要解决:**职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了。
**主要解决:**在有多种算法相似的情况下,使用 if…else 所带来的复杂和难以维护。
责任树是什么样的?
下一篇:
牛客网算法之洗牌详解