策略模式:针对一组算法,将每一个算法封装到具有共同接口的独立类中,从而使它们可以相互替换。
策略模式结构:
把超类中的某些行为抽取出一个接口或抽象类,每个行为由具体的行为类实现。
在实际使用过程中,子类继承超类,子类特有的行为交由具体的行为类实现。
使用场景:
1.所有鸭子都会游泳;
2.每种鸭子飞行方式不同,可以把飞行行为抽取为接口,每种飞行方式交由特定的飞行类实现。
源码举例:
鸭子超类:
public abstract class Duck {
FlyBehavior flyBehavior;
public abstract void display();
public void performFly()
{
flyBehavior.fly();
}
public void swim()
{
System.out.println("all ducks can swim");
}
}
飞行行为接口:
public interface FlyBehavior {
public void fly();
}
1.翅膀飞行:
public class FlyWithWings implements FlyBehavior {
@Override
public void fly() {
System.out.println("I am flying with wings");
}
}
2.不能飞行:
public class FlyNoWay implements FlyBehavior {
@Override
public void fly() {
System.out.println("I cant fly");
}
}
子类鸭子:
1.mini鸭
public class MiniDuck extends Duck {
@Override
public void display() {
System.out.println("I am a miniDuck");
}
public MiniDuck() {
flyBehavior = new FlyWithWings();
}
}
2.模型鸭子
public class ModelDuck extends Duck {
@Override
public void display() {
System.out.println("I am a model duck");
}
public ModelDuck() {
flyBehavior = new FlyNoWay();
}
}
测试代码:
public class DuckTest {
public static void main(String[] args) {
Duck miniduck = new MiniDuck();
Duck modelduck = new ModelDuck();
miniduck.performFly();
modelduck.performFly();
}
}