设计模式(三) -- 使用策略模式使每个行为隔离

前言

之前做了一个记账的功能。说的是不同的投资人的不同行为会对账目产生不同的影响。比如说,投资人买了一笔活期的产品,钱要怎么怎么变。投资人要是买定期产品,钱又要怎么怎么变。之类的,总之有一大堆情况。

那么由于之前看过一点策略模式,说的是 对象的某个行为,在不同的场景中,有不同的实现算法。 用策略模式有一个好处就是每个策略都隔离开,互不影响。

当时就想,能不能用上。如果每一个行为产生钱的变化,这些行为能隔离开,应该是非常好的。那么我就干脆把钱看成是对象,钱的变化在不同的行为中有不同的算法实现。

做法

首先像下面这样定义了各个策略,然后用 @Component 直接都创建出来,

《设计模式(三) -- 使用策略模式使每个行为隔离》

然后再在各个需要用到的地方,直接 @autowire 注解,再调用相对应的策略方法即可。

现在从结果看来,这样做还是不错的。遇到了两次钱算错的bug,也能比较快的定位。最新有个新的功能,也直接复用了其中的两个策略。

下面再看看策略模式的定义,当做个总结。

策略模式

什么是策略模式:引用 Wiki:是指对象的某个行为,在不同的场景中,有不同的实现算法。比如每个人都要交个人所得税,那么,在美国交个人所得税和在中国交个人所得税就不一样。

那么,如何实现呢,引用网上的一个图:

《设计模式(三) -- 使用策略模式使每个行为隔离》

分析一下策略模式的实现,其实也就是说,不同的算法有一个公共的父类,那么客户端在调用的时候,就 new 一个自己想要的算法即可。

那么,对应到自己的使用,其实在 spring 中就是 各个策略先创建好,由 spring 进行管理,客户端需要调用的时候,就 引入即可。

以上就是本人对策略模式的理解。如果有错误,欢迎大家在 github 上提出,谢谢。

0    0

    原文作者:算法小白
    原文地址: https://juejin.im/entry/57c41b2a5bbb500063442e6c
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞