31 | 装饰器模式:如何优化电商系统中复杂的商品价格策略?
该思维导图由 AI 生成,仅供参考
- 深入了解
- 翻译
- 解释
- 总结
装饰器模式是一种优化电商系统中复杂商品价格策略的技术,通过动态添加装修功能实现灵活扩展。该模式包括接口、具体对象、装饰类和具体装饰类,通过装饰器模式可以实现对象的动态组合和功能扩展。通过一个装修功能的案例,演示了如何使用装饰器模式实现灵活的装修功能扩展,代码结构简洁清晰,业务逻辑易读。进一步,文章提到了如何通过装饰器模式优化电商系统中的商品价格策略,实现不同促销活动的灵活组合。通过实践,读者可以更好地理解装饰器模式的优势和应用场景。 文章通过一个电商系统中商品价格策略的优化案例,详细介绍了装饰器模式的应用。首先,建立了订单、商品和促销类型等相关类,然后通过接口和抽象类实现了计算支付金额的功能。接着,通过具体的装饰类实现了优惠券和红包的计算功能,并通过工厂类组合商品的促销类型。最后,通过运行结果展示了装饰器模式的灵活性和优势。 总的来说,装饰器模式的应用使得业务代码结构清晰,易读易懂,同时实现了各个促销类型的计算功能相互独立,通过工厂类自由组合各种促销类型。这种设计模式不仅简化了业务代码,还优化了业务代码的结构设计,使得整个业务逻辑清晰易懂。文章还提到了责任链模式、策略模式与装饰器模式的相似之处,为读者提供了更多思考和探讨的空间。
《Java 性能调优实战》,新⼈⾸单¥59
全部留言(31)
- 最新
- 精选
- 密码123456责任链。最常见到的就是接收http请求了。帮我们转码,转化成实体类,等等。策略模式。最常简单和用到的就是集合排序,自定义排序规则。装饰器,最常见到的就是各种流,比如字符流,字节流等
作者回复: 👍🏻
2019-08-01249 - nightmarenetty中的pipeline,tomcat中的filter,属于责任链, springmvc中对参数解析的就是 策略模式,每一个参数类型一个实现类,用for循环解析参数 java. io就是经典的装饰器模式
作者回复: 有读源码习惯👍🏻
2019-08-0122 - 尔冬橙老师,为什么java io是装饰器模式
作者回复: 我们知道,InputStream是直接读写文件的,除了InputStream,在其上层还有BufferedInputStream、DataInputStream等其他修饰类,增加了缓存读取、类型读取等功能,相当于InputStream之上加了很多修饰功能,在所以它是一个装饰器模式。
2019-09-016 - neohope老师您好,想请教一下,在实际做优惠活动时,很多活动策略之间是相互排斥的,用了优惠1就不能用优惠2,用了优惠2就不能用红包。这种自动选择最优优惠策略,在哪里实现比较合理呢?多谢!
作者回复: 也可以基于该模式实现,我们只需要将叠加逻辑改成选择最优逻辑即可。
2019-11-243 - 冯传博希望能有个类图,这样就能一目了然的看清楚各个类之间的关系了
作者回复: 好的,后续补上
2019-08-0143 - Liam请问老师,装饰器和代理有什么区别呢,代理也可以实现被代理的接口,并注入被代理对象实现功能扩展,最后可以委托被代理对象完成基础功能
作者回复: 两者都可以达到对一个对象添加方法,但代理模式偏向于控制外部其他对象对该对象的访问,而装饰器是为了增强一个对象的功能。
2019-08-062 - -W.LI-public BigDecimal countPayMoney(OrderDetail orderDetail) { BigDecimal payTotalMoney = new BigDecimal(0); payTotalMoney = super.countPayMoney(orderDetail); payTotalMoney = countCouponPayMoney(orderDetail); return payTotalMoney; } 老师好!这里为啥要调用父类的countPayMoney()方法啊? 责任链模式:感觉责任连模式比较固定不怎么会变一层往一层调用,解耦,某一层变了不影响别的层。 策略模式:策略模式,虽然也是封装了很多不同的策略,但是使用时一般一次只选一个实现类使用,不会有嵌套。 装饰者模式:责任链有的优点他都有,装饰者还能动态组合。 谢谢老师,希望给出详细答案谢谢
作者回复: 由于我们这里考虑到灵活的组合模式,所以需要调用父类的countPayMoney()方法。
2019-08-012 - 奋斗的小白鼠老师,问一个小白问题,产品Map<PromotionType, SupportPromotions> supportPromotions; //支持促销类型 怎么存入数据库了?
作者回复: 简单的将SupportPromotions促销类型存储起来就好了
2019-12-041 - Gred老师,您在SupportPromotions重写 clone 方法,只对类进行拷贝,但是成员变量只是浅拷贝,如果要实际应用业务场景,是不是应该改用深拷贝,避免其他订单的优化券等信息影响到了。
作者回复: 是的
2019-08-131 - 峰感觉老师在红包这个例子里面,其实最重要的解耦是装饰器实现的各种基本的优惠打折手段与工厂的各种优惠规则比如红包抵用券可叠加等等。
作者回复: 对的,主要用来优化业务的复杂度。
2019-08-021