`

基于策略模式的商场价格优惠设计

 
阅读更多

基于策略模式的商场价格优惠设计

本文为个人的论文,由于一些原因未能发表,所以拿出来和朋友分享下

注:本文配有源码,如有需要的朋友,请在留言中留下邮箱地址,我会在第一时间发送

    本文介绍一种基于策略模式的商场价格优惠管理的改进设计。本设计针对传统策略模式所暴露出来的不足和功能的限制,采用多种设计模式的组合以及灵活的理念,使得功能更加符合用户的需求。

 

0  引言

以往我们都是使用传统的策略模式来对商场促销功能进行设计,但是由于其传统的缺点和单一的处理策略并不能满足用户同时进行多种策略操作以及客户端和底层代码的灵活调用。所以,这些不足为我们改进策略模式提供了思路。

1 设计思路

1.1 问题的产生

使用传统的策略模式暴露的问题如下:

(1)       策略类数量较多,所有的策略类都需要对外暴露。

(2)       不能灵活处理多种策略的绑定。

(3)       与客户端的交互不够灵活。

1.2 解决方法

    针对上述问题,可以通过不同设计模式(工厂方法模式、门面模式和模板模式)的组合以及策略枚举的组合,从而避免上述问题(详见总体设计)。

1.3 设计理念

对于一般的策略模式设计,其只能解决一种策略的实现,对于多种策略的组合有一定的局限性。因此,为了使两种策略思想的实现更加灵活,本设计采用“若干优惠组合策略包含单一优惠策略”的理念。

2         总体设计

2.1 传统模式设计构架

    为了更好地说明传统模式和改进模式设计的不同,本文在介绍传统模式的基础上对改进模式进行详细说明。

    在传统模式之中,实体类Purchase代表一个销售类与类User构成一对一的关系,其设计类图如图1所示。

传统的处理策略---本设计主要列举了打折策略(Discount)、等价策略(Equal)、满多少送多少策略(UpToUp)、用户积分策略(UserScore)。上述策略必须实现StrategyType接口,目的有两点:1、对策略进行抽象;2、上层代码可以通过接口进行编程。此外,这些策略必须通过一个封装类StrategyContext来使上层代码方便调用相应策略类。其类图如图2所示。

 


 

 

1

 

 



 

2

在传统的客户端与底层代码的交互中,往往直接通过调用相关的策略类来进行设计。但是,在策略颇多和逻辑复杂的系统中这样的设计为日后的维护和功能扩展带来了不小的麻烦。下文着重介绍改进后的策略模式。

2.2 改进模式设计构架

    首先,在实体类的设计中,增加一个PurchaseBind类,这个类主要负责记录多种策略的组合,并且被类Purchase继承。其类图如图3所示。



 

 

3

在图3的设计中,对金额的操作上并没有使用传统认为的double型,而是采用了易于操作的int型,这样做的原因有:1int类型比doublefloat类型处理更方便,不用考虑进位取舍问题(取舍是有误差的);2、目前的二进制存储机制对一些浮点数是无法准确表达的。

其次,在策略类的实现上,上述传统的设计方法并不能满足若干销售策略进行组合的需求,因为上层模块需要调用更新的User对象,而策略类并不能向上层代码传递更新的对象。为了解决这一问题,采用如下设计,由于篇幅限制,本文只列出Discount类的相关设计,其他策略类相似。类图如图4所示。



 

 

4

所以,更新后的User对象就能够通过执行父类StrategyParent中的方法将该对象即时储存在Helper类声明的列表中。上层代码通过调用Helper类中getChangeUser()方法,来获得更新的User对象,进而根据相应组合策略对更新的User对象递归遍历。

同时,为了解决传统策略模式的缺陷:所有的策略类都暴露出去,暴露的越多以后的修改风险也就越大。所以采用一个类似于增加一个配置文件的方法,实现策略类的隐藏,即策略枚举。枚举与策略类进行映射处理,避免高端模块直接访问策略类,同时使用工厂方法模式根据映射产生策略对象,其类图如图5所示。



 

 

5 

最后,采用门面模式对高层(客户端)模块与策略工厂模块的动态交互进行优化,从而封装了客户端与策略工厂之间的交互流程。这个流程主要分为以下几个子流程:

(1)       解析在类PurchaseBind中保存在LinkedList链表中的若干策略枚举,将其以参数形式传递给工厂。

(2)       通过递归调用,获得即时更新的User对象,将其与相应策略匹配。

(3)       执行相应方法,用相应策略处理相应User对象。

这一流程封装在类StrategyFacade中,其类图如图6所示:



 

 

6

这样,在传统策略模式的基础上,通过对相应流程进行改进,不仅克服了传统模式的缺点,而且更加符合灵活的设计理念。由于篇幅的限制,只列出了相关设计类图而对代码进行了省略。

3  结束语

本设计遵循灵活的设计理念,通过其他相关设计模式对策略模式进行了优化,将抽象复杂的销售策略相对具体的设计出来。因此,不仅满足了组合策略的需求,而且同时也满足了单一策略的需求,更加有利于对相关销售金额管理系统的日后维护。

参考资料:

[1] 秦小波 设计模式之禅. 北京:机械工业出版社,2010

[2] 程杰 大话设计模式. 北京:清华大学出版社,2007

[3] http://seaizon.iteye.com/blog/753762

[4] 杨年华、张礼平 JAVA类库中的策略模式. 计算机应用与软件,2004

  • 大小: 12.7 KB
  • 大小: 21.7 KB
  • 大小: 21.7 KB
  • 大小: 15 KB
  • 大小: 12.2 KB
  • 大小: 18.2 KB
2
1
分享到:
评论
1 楼 J2EE大鸟 2012-04-06  

相关推荐

    Java使用策略模式解决商场促销商品问题示例

    主要介绍了Java使用策略模式解决商场促销商品问题,简单描述了策略模式的概念、原理,并结合实例形式分析了Java基于策略模式解决商品促销问题的相关操作技巧,需要的朋友可以参考下

    基于微信小程序的老孙电子点菜系统开发设计与实现+ssm框架.rar

    基于微信小程序的老孙...通过以上功能的设计与实现,基于微信小程序的老孙电子点菜系统结合SSM框架为餐厅提供了一个便捷、高效的点餐解决方案,有助于提升餐厅运营效率和顾客满意度,实现线上线下融合的餐饮服务模式。

    ssm项目基于微信微服务架构的汽车租赁系统的设计与实现_zaxzu.zip

    SSM项目基于微信微服务架构的汽车租赁系统的设计与实现_zaxzu.zip是一个使用Java语言开发的Web应用,它采用了SSM(Spring Spring MVC MyBatis)框架,并结合了微信小程序前端技术。该项目利用MySQL作为后端数据库,...

    基于SDN框架的网络资源定价策略

    最后,根据所提出的资源定价策略,对资源价格进行实例仿真,结果表明,通过价格刺激用户提前预约资源,结合每个用户的信任度与消费习惯给出相应的优惠价格,可以有效地避免用户集中获取网络资源。

    ssm项目基于微信小程序的付费自习室管理系统.zip

    4. **时段管理**:管理员可设置不同的时段价格策略,如高峰时段与非高峰时段的费用差异。 5. **数据统计**:后台统计各时间段的使用频率和收入情况,帮助优化经营策略。 6. **会员系统**:提供会员注册功能,为会员...

    ssm项目基于微信小程序的电影院票务系统.zip

    SSM项目基于微信小程序的电影院票务系统.zip是一个使用Java语言开发的Web应用,它采用了SSM(Spring Spring MVC MyBatis)框架,并结合了微信小程序前端技术。该系统旨在为电影爱好者提供一个便捷的在线购票和观影...

    基于SSM框架停车场管理系统.zip

    基于SSM框架的停车场管理系统是为商业中心、住宅区和公共设施等场所设计的车辆停放管理解决方案。利用Spring、Spring MVC和MyBatis(即SSM)这三个主流的Java开发框架,该系统提供了车位监控、自动计费、出入记录...

    微信小程序基于微信小程序的社区团购+ssm.zip

    SSM项目小程序“基于微信小程序的社区团购Ssm.zip”是一个结合了Spring、Spring MVC和MyBatis(SSM)框架开发的微信小程序,旨在为社区居民提供一个方便、高效的团购服务平台。该项目融合了微信小程序的用户便利性与...

    最新小程序基于微信小程序的购物系统+php.zip

    5. **优惠券与促销活动**:商家可以通过小程序发布优惠券和促销活动,提高销售额和客户黏性。 6. **客户服务支持**:提供在线客服聊天功能,解答顾客疑问,提升服务质量。 7. **数据分析后台**:为商家提供销售数据...

    基于SSM+Vue的艺诚美业管理系统(源码+部署说明+系统介绍).zip

    \n\n2、服务管理:支持服务的添加、编辑、删除等管理操作,可以配置不同的折扣、优惠等策略,提供多种服务的组合和标准化进行管理。\n\n3、订单管理:支持在线预约、下单、线上支付等操作,提供订单状态查询、订单退...

    停车场管理系统【尚学堂·百战程序员】

    2. **停车费用计费**:根据停车时长和车型等因素,智能计算停车费用,支持多种计费模式和优惠策略。 3. **车位信息管理**:实时更新车位状态,提供可视化的车位分布图,方便管理人员了解车位使用情况。 4. **用户...

    电子商务大赛获奖作品(1).doc

    中国XX国际软件设计与应用 大赛作品 易 旅 吧 网 络 商 务 平 台 摘 要 随着计算机网络的快速发展,我们从传统的交流方式,逐渐转变为通过有线网络的交 流方式。而今天,无线网络也即将来临,3G时代将使我们的生活变...

    discount-calculator

    我们在这里使用策略模式。 每个折扣计算器都是一种策略,并使用DiscountType进行唯一标识。 DiscountService基于DiscountCalculator接口的现有实现构造地图,因此添加更多折扣计算器时不需要任何更改。 执行 执行...

    电子商务网站调研报告.doc

    课 题 调 研 报 告 电子商务网站调研报告 张海波 10级计科特色班A组 张怡文 信工 院 计算机科学 系 2011 年 9月 12 日 调研目的 了解在电子商务在不同平台下网站经营模式、盈利方式的差别。借此深入理解服务外包 中...

    电子商务网站调研报告(1).doc

    课 题 调 研 报 告 电子商务网站调研报告 张海波 1042157124 10级计科特色班A组 张怡文 信工 院 计算机科学 系 2011 年 9月 12 日 调研目的 了解在电子商务在不同平台下网站经营模式、盈利方式的差别。借此深入理解...

    一个物联网充电管理平台方案

    一个物联网充电管理平台方案,是一种基于互联网和物联网技术的智能化充电管理系统。该平台适用于充电桩(慢充+快充)运营者、厂家自行运营充电站服务的用户,旨在为用户提供便捷、高效、安全的充电服务。 首先,该...

    mysql数据库分库分表实践

    一、背景 随着零售门店数量的增长,库存表,优惠劵表,消息表,订单表数据量不断的增多,目前一主(写)多从的MySQL...支持独有的基于E-R 关系的分片策略,实现了高效的表关联查询 三、架构设计改造 目前生产数据库架构

    最新小程序停车共享小程序+ssm.zip

    微信小程序“停车共享小程序Ssm.zip”是一款为城市停车...这款小程序不仅提供了一个全面的停车共享管理平台,还通过智能化服务和数据支持,帮助解决城市停车难的问题,同时也为停车场运营商提供了增值服务和盈利模式。

    中国十大网络安全产品.doc

    最 后是"天眼+安服"模式显著提升了威胁响应速度,依托超千人规模的安全运营服务团 队,不仅使产品的实战化水平和易用性迅速迈上大台阶,更是大幅度提升了威胁的 响应速度。由此可见,威胁检测与响应必须具备强大的...

    大数据应用案例分析报告.doc

    爱加密高磊提出,基于大数据技术能够从海量数据中分析已经发生地安全问题、病 毒样本、攻击策略等,对于安全问题地分析能够以宏观角度和微观思路双管齐下找到问 题根本地存在.所以,在安全领域使用大数据技术,可以...

Global site tag (gtag.js) - Google Analytics