策略模式(Strategy Pattern)
概述
策略模式,是一种将策略封装类,并采取组合的方式,让策略使用者进行使用。
角色
策略接口: 定义策略的接口方法
策略具体实现: 实现策略接口
策略使用者:使用具体的策略
类图

当鸭子有许多种飞行方式,将飞行方式作为策略,单独进行抽象并实现,是的鸭子接口和具体的飞行方式进行了解耦,并且具体的鸭子可以根据需要调整需要使用的策略。
代码
abstract class Duck {
protected FlyStrategy strategy;
public void setStrategy(FlyStrategy s) {
this.strategy = s;
}
abstract void fly();
abstract void quack();
}
interface FlyStrategy {
void tryFly();
}
class FlyHigh implements FlyStrategy {
public void tryFly() {
System.out.println("fly high");
}
}
class FlyNoWay implements FlyStrategy {
public void tryFly() {
System.out.println("can't fly");
}
}
class SuperDuck extends Duck {
@Override
void fly() {
strategy.tryFly();
}
@Override
void quack() {
System.out.println("super quack");
}
}
class YellowDuck extends Duck {
@Override
void fly() {
strategy.tryFly();
}
@Override
void quack() {
System.out.println("ga ga ga");
}
}
public class StrategyPattern {
public static void main(String[] args) {
SuperDuck duck = new SuperDuck();
duck.setStrategy(new FlyHigh());
duck.fly();
}
}
总结
策略模式,符合三个设计原则,
- 封装变化,将不同的策略封装起来
- 多用组合,少用继承。组合更灵活,继承会影响到扩展性.
- 针对接口编程。
真实场景
- java.util.Comparator
- HttpServlet
网友评论