策略模式

假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站可能对所有的高级会员提供每本20%的促销折扣;对中级会员提供每本10%的促销折扣;对初级会员没有折扣。

根据描述,折扣是根据以下的几个算法中的一个进行的:
  算法一:对初级会员没有折扣。
  算法二:对中级会员提供10%的促销折扣。
  算法三:对高级会员提供20%的促销折扣。

public interface DiscountStrategy {
    /**
    * 折扣策略
    * @param booksPrice 图书的原价
    * @return 计算出打折后的价格
    */
    public double calcPrice(double booksPrice);
}

初级会员

public class PrimaryMemberStrategy implements MemberStrategy {
    @Override
    public double calcPrice(double booksPrice) {
        return booksPrice;
    }
}

中级会员

public class IntermediateMemberStrategy implements MemberStrategy {
    @Override
    public double calcPrice(double booksPrice) {
        return booksPrice * 0.9;
    }
}

高级会员

public class AdvancedMemberStrategy implements MemberStrategy {
    @Override
    public double calcPrice(double booksPrice) {
        return booksPrice * 0.8;
    }
}

价格类

public class Price {
    //持有一个具体的策略对象
    private MemberStrategy strategy;
    /**
    * 构造函数,传入一个具体的策略对象
    * @param strategy 具体的策略对象
    */
    public Price(MemberStrategy strategy){
        this.strategy = strategy;
    }
    public void setPrice(MemberStrategy strategy){
        this.strategy = strategy;
    }
    /**
    * 计算图书的价格
    * @param booksPrice 图书的原价
    * @return 计算出打折后的价格
    */
    public double quote(double booksPrice){
        return this.strategy.calcPrice(booksPrice);
    }
}

调用:

public class Client {
    public static void main(String[] args) {
        //选择并创建需要使用的策略对象
        MemberStrategy strategy = new IntermediateMemberStrategy();
        Price price = new Price(strategy);
        //计算价格
        double quote = price.quote(300);
        System.out.println("图书的最终价格为:" + quote);
    }
}

策略模式的重心不是如何实现算法,而是如何组织、调用这些算法,从而让程序结构更灵活,具有更好的维护性和扩展性。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • 1. 简介 策略(Strategy)模式定义了一系列的算法,并将每一个算法封装起来,而且使它们还可以相互替换。策略...
    LeeLeCoder阅读 3,641评论 0 1
  • 从本篇文章开始将开始一些列对Java设计模式的学习。Java设计模式是前任总结的优秀的经验,是编写高质量代码的学习...
    Ruheng阅读 6,028评论 2 9
  • 定义 策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可...
    步积阅读 4,121评论 0 2
  • 时光静好,岁月易老. 红颜相伴,此生无憾. 磨石温书,笑颜蕴藏, 平淡生活,互敬互爱。 情之所牵,心之所系. 执子...
    冰冰曼曼阅读 3,269评论 0 0
  • 丰子恺层在一篇文章里写道:“顽童一脚踏死数百蚂蚁,我劝他不要。并非爱惜蚂蚁,或者想供养蚂蚁,只恐这一点残忍心扩而充...
    小安子想当ceo阅读 3,398评论 0 0

友情链接更多精彩内容