设计模式之策略模式总结

定义

策略模式定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。

实际例子

在Head First 设计模式的开篇就讲了一个策略模式的例子。

要实现一组鸭子类,每种鸭子类可能有不同的叫声、外形和飞行方式。

将鸭子作为一个抽象父类,同时定义叫声接口,外形接口,飞行接口。并对每一种叫声、外形、飞行方式都有一个具体的实现类(实现对应接口)。而在鸭子类中持有叫声、外形和飞行方式三个接口类型的成员变量。

对于具体的一种鸭子,在构造方法里使用不同的行为实现类对叫声、外形和飞行方式进行初始化。
具体代码:(在三个行为中只包括叫声接口)

//鸭子父类
public abstract class Duck {
    private FlyBehavior flyBehavior;

    public void performFly() {
        flyBehavior.fly();
    }

    public void setFlyBehavior(FlyBehavior flyBehavior) {
        this.flyBehavior = flyBehavior;
    }

    public FlyBehavior getFlyBehavior() {
        return flyBehavior;
    }
}

//飞行接口
public interface FlyBehavior {
    void fly();
}

//飞行实现类
public class FlyWithWing implements FlyBehavior {
    @Override
    public void fly() {
        System.out.println("fly with wing!");
    }
}

//具体鸭子类
public class BigDuck extends Duck {
    public BigDuck() {
        setFlyBehavior(new FlyWithWing());
    }

    public static void main(String[] args) {
        Duck duck = new BigDuck();
        duck.performFly();
    }
}

设计模式原则总结1

  • 封装变化
  • 多用组合,少用继承
  • 针对接口而不是实现编程

你可能感兴趣的:(设计模式之策略模式总结)