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图
策略模式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应用场景
- 多个类只有在算法或者行为上略有不同的场景。
- 算法需要自由切换的场景
- 需要屏蔽具体算法规则的场景
网友评论