策略模式

2018-04-15  本文已影响0人  资深智障

行为类设计模式

简要定义

定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化

要点

类图

Strategy Mode.png

具体实现

有一家卖书的网站想做一套结算系统,其中的一部分就是计算书的价格,这家网站上的书基本上都有优惠,而且不同种类的书优惠不同,比如漫画书打9折,小说打6折等等
[参考]https://blog.csdn.net/xingjiarong(https://blog.csdn.net/xingjiarong/article/details/50168853)

//即类图中的Context类
public abstract class Book {

    //原价
    protected double basePrice = 0.0;
    //持有策略
    protected Strategy strategy;

    public Book(double basePrice){
        this.basePrice = basePrice;
    }

    /**
     * 设置策略
     * @param strategy
     */
    public void setStrategy(Strategy strategy){
        this.strategy = strategy;
    }

    /**
     * 利用策略的统一接口实现获取书的应付价格
     * @return
     */
    public double getPrice(){
        return strategy.getDiscount(basePrice);
    }

    /**
     * 抽象的展示方法,每类书都有自己的实现方式
     */
    public abstract void show();

}
抽象策略类
public abstract class Strategy {
    public abstract double getDiscount(double basePrice);
}
//具体策略类
public class NovelStrategy extends Strategy{

    public double getDiscount(double basePrice) {
        return 0.6*basePrice;
    }

}
//测试类
public class Client {

    public static void main(String[] args) {
        Book book = new Comic(12.3);
        Strategy strategy = new ComicStrategy();
        //设置采用何种策略
        book.setStrategy(strategy);
        book.getPrice();
        book.show();
    }

}

优缺点

优点

策略模式将行为封装在一个个独立的Strategy类中, 这样做有如下好处

缺点

使用场景

具体应用
上一篇 下一篇

猜你喜欢

热点阅读