设计模式4之(策略模式)
策略模式
若有不恰之处,请各位道友指正~
个人觉得,看懂类图就是学习设计模式的精髓了。
策略模式概念
- 把变化的代码从不变的代码中抽离出来
- 多用组合/聚合,少用聚合
根据类图写代码
代码结构
//抽象类
public abstract class Duck {
//用聚合的方式引用行为
FlyAction flyAction;
SwimAction swimAction;
abstract void display();
public void fly(){
if(flyAction != null){
flyAction.fly();
}
}
public void swim(){
if(swimAction != null){
swimAction.swim();
}
}
// set 方法改变 实体类对象的具体实现
public void setFlyAction(FlyAction flyAction){
this.flyAction = flyAction;
}
public void setSwimAction( SwimAction swimAction){
this.swimAction = swimAction;
}
}
//野鸭
public class WildDuck extends Duck {
//初始化时,赋予其行为
public WildDuck(){
flyAction = new CanFlyAction();
swimAction = new CanSwimAction();
}
@Override
void display() {
System.out.println("野鸭~~");
}
}
//行为
public interface FlyAction {
void fly();
}
//行为的实现
public class CanFlyAction implements FlyAction {
@Override
public void fly() {
System.out.println("我能飞~~~");
}
}
//测试类
public class StrategyTest {
public static void main(String[] args) {
Duck duck = new WildDuck();
//初始化行为
duck.fly();
//通过set方法改变行为
duck.setFlyAction(new NoFlyAction());
duck.fly();
}
}
策略模式
其实就是“对修改关闭,对扩展开放”。