20.JAVA编程之接口应用(策略模式)

策略模式,个人理解是,将一个算法抽出来,定义一个接口声明,给出所有的具体策略类所需的接口,各子类implement接口,然后在各自的子类写出各自的实现,这样不会相互影响,并且可以做各种替换,最后写一个持有一个抽象策略的引用的类。
例题:
假设现在要设计一个贩卖各类书籍的电子商务网站的购物车系统。一个最简单的情况就是把所有货品的单价乘上数量,但是实际情况肯定比这要复杂。比如,本网站可能对所有的高级会员提供每本20%的促销折扣;对中级会员提供每本10%的促销折扣;对初级会员没有折扣。

根据描述,折扣是根据以下的几个算法中的一个进行的:

算法一:对初级会员没有折扣。

算法二:对中级会员提供10%的促销折扣。

算法三:对高级会员提供20%的促销折扣。

使用策略模式来实现的结构图如下:



参考代码:

public class Demo {
    public static void main(String[] args) {
        MemberStrategy ms = new IntermediateMember();
        Price p = new Price(ms);
        System.out.println(p.getPrice(100));
    }
}

interface MemberStrategy{
    public double getPrice(double price);
}

class PrimaryMember implements MemberStrategy{

    @Override
    public double getPrice(double price) {
        return price;
    }
}

class IntermediateMember implements MemberStrategy{

    @Override
    public double getPrice(double price) {
        return price*0.9;
    }
}

class AdvanceMember implements MemberStrategy{

    @Override
    public double getPrice(double price) {
        return price*0.8;
    }
}

class Price{
    private MemberStrategy memberStrategy;

    public Price(MemberStrategy ms) {
        this.memberStrategy = ms;
    }

    public double getPrice(double price){
        return this.memberStrategy.getPrice(price);
    }
}

运行效果:


参考: 《JAVA与模式》之策略模式

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

相关阅读更多精彩内容

  • ORA-00001: 违反唯一约束条件 (.) 错误说明:当在唯一索引所对应的列上键入重复值时,会触发此异常。 O...
    我想起个好名字阅读 11,011评论 0 9
  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,907评论 1 32
  • 一转眼都2018年了,总能想起2008年那个夏天,我在西安三桥机械市场地下室门缝里看过的奥运会,如今的三桥重型机械...
    谷较廋阅读 1,742评论 0 0
  • 难得今天下课后无人打扰,悠闲地度过了一整个下午和晚上。天很好,阳光明媚,冷得令人精神清爽。下午把《写作宝典》读得就...
    大猫咪F阅读 2,187评论 0 1
  • 序 最近失业待家学习ROR开发,生活真不容易啊!闲来扯淡不如言归正传。 IDE:RubyMine Ruby版本:2...
    十里桃花终是你阅读 2,806评论 0 1

友情链接更多精彩内容