美文网首页
策略模式

策略模式

作者: andpy | 来源:发表于2018-01-30 10:27 被阅读4次

    策略模式

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

    代码示例

    以计算车费为例:
    抽象接口: AbstractStrategy

    interface AbstractStrategy {
        int calculatePrice(int price);
    }
    

    公车:BusStrategy

    public class BusStrategy implements AbstractStrategy {
        @Override
        public int calculatePrice(int km) {
            int extraTotal = km - 10;
            int extraFactor = extraTotal / 5;
            int faction = extraTotal % 5;
            int price = 1 + extraFactor % 5;
            return faction > 0 ? ++price : price;
        }
    }
    

    出租:TaixStrategy

    public class TaixStrategy implements AbstractStrategy {
        @Override
        public int calculatePrice(int km) {
            return 2 * km;
        }
    }
    

    context:上下文管理

    public class Context {
        private AbstractStrategy abstractStragry;
    
        public void setAbstractStragry(AbstractStrategy abstractStragry) {
            this.abstractStragry = abstractStragry;
        }
    
    
        public int calculatePrice(int km) {
            return abstractStragry.calculatePrice(km);
        }
    
    }
    

    验证:

    public static void main(String[] args) {
            Context context = new Context();
            context.setAbstractStragry(new BusStrategy());
            System.out.println("bus: " + context.calculatePrice(20));
        }
    

    这样很方便的失效的解耦的操作,传统的模式可能需要 if else的模式,这种方式,简介明了,易于管理.

    优点

    • 上下文(Context)和具体的策略(ConcreteStrategy)是松耦合关系。
    • 满足开闭原则(不需要再次修改源码,只需要再次定义新的策略即可)

    Android 策略模式的使用

    • Volley中HttpStack。

    相关文章

      网友评论

          本文标题:策略模式

          本文链接:https://www.haomeiwen.com/subject/qsbqzxtx.html