设计模式

策略模式(Strategy)

2020-07-20  本文已影响0人  秀儿2020

定义

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

本质

分离算法,选择实现。

登场角色

代码示例

/**
 * 策略,用来约束一系列具体的策略算法
 */
public interface CalculateStrategy {
    /**
     * 按照距离计算公里数
     * @param km
     * @return
     */
    int calculatePrice(int km);
}


/**
 * 公交车价格计算策略
 */
public class BusStrategy implements CalculateStrategy{
    @Override
    public int calculatePrice(int km) {
        /*
        这里是公交车价格计算策略的具体计算过程
        这里简单计算
         */
        return km * 1;
    }
}


/**
 * 地铁价格计算策略
 */
public class SubwayStrategy implements CalculateStrategy{
    @Override
    public int calculatePrice(int km) {
        /**
         * 这里是地铁价格计算策略
         */
        return km * 2;
    }
}

/**
 * 上下文,使用策略的角色
 */
public class TranficCalculator {
    CalculateStrategy mCalculateStrategy;
    public static void main(String[] args){
        TranficCalculator tranficCalculator = new TranficCalculator();
        tranficCalculator.setmCalculateStrategy(new BusStrategy());
        System.out.println("公交车价格计算");
        System.out.println(tranficCalculator.calculatePrice(3));

        tranficCalculator.setmCalculateStrategy(new SubwayStrategy());
        System.out.println("地铁价格计算");
        System.out.println(tranficCalculator.calculatePrice(3));
    }

    public void setmCalculateStrategy(CalculateStrategy mCalculateStrategy) {
        this.mCalculateStrategy = mCalculateStrategy;
    }

    public int calculatePrice(int km){
        return mCalculateStrategy.calculatePrice(km);
    }
}

运行结果

公交车价格计算
3
地铁价格计算
6

优点

缺点

何时使用

上一篇 下一篇

猜你喜欢

热点阅读