前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >大话设计模式笔记(二)——商品促销 策略模式

大话设计模式笔记(二)——商品促销 策略模式

作者头像
逝兮诚
发布2019-10-30 13:46:17
8830
发布2019-10-30 13:46:17
举报
文章被收录于专栏:代码人生代码人生

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/luo4105/article/details/76542977

第二章商品促销——策略模式

需求:商品价格计算,并增加折扣条件

工厂模式UML图

在工厂模式中,调用端代码会通过折扣工厂类生成折扣对象,折扣对象调用折扣方法。这里关联了两个类,工厂类和抽象折扣类。

策略模式UML图

在策略模式中,会在策略环境类的构造器中完成折扣类的初始话,并在策略环境的实现方法调用折扣类的折扣算法。这样调用类只会关联策略环境类。

简单工厂模式需要的是生成的对象,所以在客户端代码中会存在工厂类和生成类,而策略模式关注的是相应算法,它并不关注算法类对象,所以在客户端代码中只会存在context环境类。这样降低代码耦合度。

代码

Context

代码语言:javascript
复制
public class SaleContext {

    private SaleStrategy saleStrategy = null;

    public SaleContext(String saleSelector) {
        switch (saleSelector) {
            case "打9折":
                this.saleStrategy = new PercentSaleStrategy(0.9);
                break;
            case "打8折":
                this.saleStrategy = new PercentSaleStrategy(0.8);
                break;
            case "满300减100":
                this.saleStrategy = new FullSendSaleStrategy(300, 100);
                break;
            default:
                this.saleStrategy = new NormalStrategy();
                break;
        }
    }

    public double contextInterface(double money) {
        return saleStrategy.getSaleMoney(money);
    }

}

SaleStrategy

代码语言:javascript
复制
abstract class SaleStrategy {
    public abstract double getSaleMoney(double money);
}

PercentSaleStrategy(折扣促销)

代码语言:javascript
复制
class PercentSaleStrategy extends SaleStrategy {

    private double pecent = 0.0d;

    public PercentSaleStrategy(double pecent) {
        this.pecent = pecent;
    }

    @Override
    public double getSaleMoney(double money) {
        return money * pecent;
    }
}

FullSendSaleStrategy(满减促销)

代码语言:javascript
复制
class FullSendSaleStrategy extends SaleStrategy {

    private double fullMoney = 0.0d;
    private double sendMonty = 0.0d;

    public FullSendSaleStrategy(double fullMoney, double sendMonty) {
        this.fullMoney = fullMoney;
        this.sendMonty = sendMonty;
    }

    @Override
    public double getSaleMoney(double money) {
        return money > fullMoney ? (money - sendMonty) : money;
    }
}

总结

策略模式是定义了一系列算法,这些算法从层次上实现相同的功能,最好析取出算法层,可以减少算法之间和调用算法的耦合。

在实际工作中,当听到需求中包含在不同时间应用不同业务规则,就可以考虑使用策略模式。

设计模式的核心思想就是对接口编程,封装变化。

应用场景

只要在分析过程中听到需要在不同时间应用不同的业务规则,就可以考虑使用策略模式。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2017-08-01 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 第二章商品促销——策略模式
    • 代码
      • 总结
        • 应用场景
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档