Android设计模式-策略模式

UML关系简单介绍
UML简单使用的介绍
创建型设计模式
Android设计模式-单例模式
Android设计模式-工厂模式
Android设计模式-抽象工厂模式
Android设计模式-建造者模式
Android设计模式-原型模式
结构型设计模式
Android设计模式-代理模式
Android设计模式-装饰模式
Android设计模式-适配器模式
Android设计模式-组合模式
Android设计模式-门面模式
Android设计模式-桥接模式
Android设计模式-享元模式
行为型设计模式
Android设计模式-策略模式
Android设计模式-命令模式
Android设计模式-责任链模式
Android设计模式-模版方法模式
Android设计模式-迭代器模式
Android设计模式-观察者模式
Android设计模式-备忘录模式
Android设计模式-中介者模式
Android设计模式-访问者模式
Android设计模式-状态模式
Android设计模式-解释器模式

1.定义

策略模式也叫政策模式。
定义一组算法,将每个算法都封装起来,并且使他们之间都可以互换。
策略模式使用的就是面向对象的继承和多态。

2.策略模式UML图

Android设计模式-策略模式_第1张图片
策略模式UML图

角色介绍

  • Strategy 抽象策略角色 定义每个策略必须有的属性和方法
  • ConcreteStrategy 具体策略角色 实现抽象策略角色,有该策略的具体实现
  • Context 封装角色,也叫上下文角色,屏蔽高层模块对策略的直接访问,封装可能存在的变化。

3.简单实现

3.1 抽象策略角色

public interface Strategy {
    void doSomething();
}

3.2 具体策略角色

public class ConcreteStrategy1 implements Strategy {
    @Override
    public void doSomething() {
        System.out.println("具体策略1");
    }
}


public class ConcreteStrategy2 implements Strategy {
    @Override
    public void doSomething() {
        System.out.println("具体策略2");
    }
}

3.3 封装角色

public class Context {
    private Strategy strategy;

    public Context(Strategy strategy) {
        this.strategy = strategy;
    }

    public void doAnything(){
        this.strategy.doSomething();
    }
}

3.4 客户端调用

public class MyClass {
    public static void main(String args[]) {

        Strategy strategy1=new ConcreteStrategy1();
        Strategy strategy2=new ConcreteStrategy2();

        Context context=new Context(strategy1);
        context.doAnything();

        System.out.println("-----------");

        context=new Context(strategy2);
        context.doAnything();
    }
}


打印结果为

具体策略1
-----------
具体策略2

ConcreteStrategy1 ConcreteStrategy2分别为两种具体的策略,就想算法里的加法和减法。通过封装角色的封装,在客户端调用的时候,只需要传入相应的策略到封装角色中,就可以调用其具体的实现方法。

4.总结

4.1优点

  • 策略算法可以自由切换,只要实现抽象,就可以通过传入封装角色中进行切换
  • 避免使用多重条件判断
  • 扩展性良好 增加一个策略非常简单,只需要实现抽象策略角色就行。

4.2缺点

  • 每个策略对应一个策略类,类数量增加
  • 所有的策略类都需要对外暴露,否则客户端不晓得怎么传了。。。

4.3应用场景

  • 多个类只有在算法或者行为上略有不同的场景。
  • 算法需要自由切换的场景
  • 需要屏蔽具体算法规则的场景

你可能感兴趣的:(Android设计模式-策略模式)