策略模式:会员卡功能

版权声明:本文为博主原创文章,转载需标明出处哦 ^-^。 https://blog.csdn.net/qq_33101675/article/details/83148965

老板发话了,这个季度要做 会员卡功能,我先来做做功课。

前言

上面这张图是京东商城的会员体系,总共包含五种不同等级的会员,分别是注册会员,铜牌会员,银牌会员,黄金会员,钻石会员。从上图可以看出,不同等级会员享有不同的优惠服务,那么这么多优惠服务在程序中是怎么实现的呢?最直接了当的方式,就是写一堆if else去做判断,这显然不是最佳实现方式,很不利于后期维护。实际上这里需要用到设计模式中的策略模式,针对不同等级的会员,每一种会员特权都拒用不同的优惠策略。

策略模式

定义算法簇,分别封装起来,让他们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。

百度百科:对象有某个行为,但是在不同的场景中,该行为有不同的实现算法。比如每个人都要“交个人所得税”,但是“在美国交个人所得税”和“在中国交个人所得税”就有不同的算税方法。

策略模式:

  • 定义了一族算法(业务规则);

  • 封装了每个算法;

  • 这族的算法可互换代替(interchangeable)。 [1] 

策略模式结构原型

策略模式的组成

应用场景(Context):

1、需要使用ConcreteStrategy提供的算法。

2、 内部维护一个Strategy的实例。

3、 负责动态设置运行时Strategy具体的实现算法。

4、负责跟Strategy之间的交互和数据传递。

抽象策略(StrategyInterface): 定义了一个公共接口,各种不同的算法以不同的方式实现这个接口,Context使用这个接口调用不同的算法,一般使用接口或抽象类实现。

具体策略(Strategy):包装了相关的算法和行为。

百度百科:

—抽象策略角色: 策略类,通常由一个接口或者抽象类实现。

—具体策略角色:包装了相关的算法和行为。

—环境角色:持有一个策略类的引用,最终给客户端调用。

具体应用场景

百度百科:

1、 多个类只区别在表现行为不同,可以使用Strategy模式,在运行时动态选择具体要执行的行为。

2、 需要在不同情况下使用不同的策略(算法),或者策略还可能在未来用其它方式来实现。

3、 对客户隐藏具体策略(算法)的实现细节,彼此完全独立。

我们取上图中的某些模块来做,会员体系有:

铜牌会员(9折,不包邮,不支持7天无理由退款)

银牌会员(8折,不包邮,不支持7天无理由退款)

金牌会员(7折,包邮,不支持7天无理由退款)

钻石会员(6折,包邮,支持7天无理由退款)

代码实现

抽象策略角色

 如果有其他的策略,就直接在这里加接口就行了

 具体策略角色

 

 

 环境角色

 客户端调用

 

 

猜你喜欢

转载自blog.csdn.net/qq_33101675/article/details/83148965
今日推荐