java 策略模式会员_设计模式——策略模式:会员价格体系的简单实现

本文通过策略模式讲解如何设计会员价格体系,避免大量if-else,提高代码可维护性。介绍了策略模式的结构原型,包括上下文、抽象策略和具体策略,并展示了Java代码实现,包括普通会员、黄金会员和钻石会员的优惠策略。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

d77babf7c426aee77bebfaf6a7546339.png

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

策略模式

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

策略模式结构原型

beb03fd3749a467f21ba5bd0fcbb98cb.png

策略模式的组成

应用场景(Context):

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

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

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

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

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

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

具体应用场景

具体策略划分

我们现在来模仿京东会员机制,将会员分为三种等级:普通会员,金牌会员,钻石会员。以下为会员优惠服务,不同等级的会员拥有不同的优惠策略:

优惠服务\会员等级

普通会员

黄金会员

钻石会员

会员特价

正常价

打九折

打九折

运费

5元

5元

包邮

会员策略模型

7dfa427ecb0b6169f9e4fc445d04bc5e.png

代码实现

抽象策略角色

会员接口:MemberInterface.java

package strategy.member;

/**

* 会员接口

* @authorvision

*/

public interfaceMemberInterface{

/**

* 会员价格

* @paramprice

* @return*/

publicDouble getPrice(Double price);

/**

* 是否包邮

* @return*/

publicbooleanfreeShipping();

}

具体策略角色

普通会员:NormalMember.java

package strategy.member.impl;

import strategy.member.MemberInterface;

/**

* 普通会员

* @authorvision

*/

public classNormalMemberimplementsMemberInterface{

/**

* 会员价格,正常价

*/

publicDouble getPrice(Double price){

//普通会员原价销售

return price;

}

/**

* 不包邮

*/

publicbooleanfreeShipping(){

//普通会员不包邮

return false;

}

}

黄金会员:GoldMember.java

package strategy.member.impl;

import strategy.member.MemberInterface;

/**

* 黄金会员

* @authorvision

*/

public classGoldMemberimplementsMemberInterface{

/**

* 会员价格,打九折

*/

publicDouble getPrice(Double price){

return price*0.9;

}

/**

* 不包邮

*/

publicbooleanfreeShipping(){

return false;

}

}

钻石会员:DiamondMember.java

package strategy.member.impl;

import strategy.member.MemberInterface;

/**

* 钻石会员

* @authorvision

*/

public classDiamondMemberimplementsMemberInterface{

/**

* 会员价格,打九折

*/

publicDouble getPrice(Double price){

return price*0.9;

}

/**

* 包邮

*/

publicbooleanfreeShipping(){

return true;

}

}

环境角色

PriceHandle.java

package strategy;

import strategy.member.MemberInterface;

import strategy.member.impl.DiamondMember;

import strategy.member.impl.GoldMember;

import strategy.member.impl.NormalMember;

/**

* 价格处理类

* @authorvision

* @date2016年10月12日

*/

public classPriceHandle{

private MemberInterface memberInterface;

public void setMemberInterface(MemberInterface memberInterface) {

this.memberInterface = memberInterface;

}

/**

* 计算出需要支付的费用

* @return*/

private Double getMemberPrice(Double price){

Double postage=5.0;

if(memberInterface.freeShipping()){

postage=0.0;

}

return (memberInterface.getPrice(price)+postage);

}

}

客户端调用

public class TestClass{

publicstaticvoidmain(String[] args){

PriceHandle priceHandle=new PriceHandle();

//会员等级(0普通会员,1黄金会员,2钻石会员)

int memberType=2;

switch (memberType) {

case 0:

priceHandle.setMemberInterface(new NormalMember());

break;

case 1:

priceHandle.setMemberInterface(new GoldMember());

break;

case 2:

priceHandle.setMemberInterface(new DiamondMember());

break;

}

System.out.println(priceHandle.getMemberPrice(10.0));;

}

}

备注

参考资料:《Head First 设计模式》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值