策略模式(行为型模式)
内容:
public interface Strategy {
void show();
}
public class StrategyA implements Strategy {
@Override
public void show() {
System.out.println("全场八折");
}
}
public class Salesman {
private Strategy strategy;
public Salesman(Strategy strategy){
this.strategy = strategy;
}
void SalesmanShow(){
this.strategy.show();
}
}
- 客户端类(创建环境角色对象,确定具体调用哪个策略、方法)
public class Client {
public static void main(String[] args) {
Salesman salesmanA = new Salesman(new StrategyA());
salesmanA.SalesmanShow();
Salesman salesmanB = new Salesman(new StrategyB());
salesmanB.SalesmanShow();
Salesman salesmanC = new Salesman(new StrategyC());
salesmanC.SalesmanShow();
}
}
优点:
- 策略类之间可以自由切换(策略类实现的是用一个几口)
- 易于扩展(增加一个新的策略只需要添加一个具体的策略类即可,符合“开闭原则”)
补充:开闭原则
软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的
- 避免使用多重条件语句(if else)体现面向对象设计思想
缺点:
使用场景:
- 系统动态在几个算法中选一个
- 一个类有多种行为,并一多个条件语句的形式出现
- 系统各算法完全独立,对客户隐藏具体细节
- 系统要求客户不应该知道其操作的数据,用策略模式隐藏算法先关的数据结构
- 多个类只有表现行为不同,在运行是动态选择要执行的行为