策略模式:分别封装行为接口,实现算法族,父类里放行为接口对象,在子类里具体设定行为对象。原则就是:分离变化部分,封装接口,基于接口编程各种功能。此模式让行为算法的变化队里与算法的使用者。
1.Duck
1.1Duck的父类
public abstract class Duck {
QuackBehavior quackBehavior;
FlyBehavior flyBehavior;
public abstract void display();
public void fly(){
flyBehavior.fly();
}
public void quack(){ // 表示叫声
quackBehavior.quack();
}
public Duck(){}
}
注意父类和子类的一个对应关系
1.2 绿头鸭
public class GreenDuck extends Duck {
public GreenDuck(){
flyBehavior = new Fly100();
quackBehavior = new QuackBig();
}
@Override
public void display() {
System.out.println("我是绿头鸭子");
}
}
1.3 红头鸭
public class RedDuck extends Duck {
public RedDuck(){
flyBehavior = new Fly50();
quackBehavior = new QuackSmall();
}
@Override
public void display() {
System.out.println("我是红头鸭");
}
}
下面是封装的行为和相应的算法族
2.Fly
public interface FlyBehavior {
public void fly();
}
2.2 fly50
public class Fly50 implements FlyBehavior {
@Override
public void fly() {
System.out.println("我可以飞50米哦");
}
}
2.3 fly100
public class Fly100 implements FlyBehavior {
@Override
public void fly() {
System.out.println("我可以飞100米哦");
}
}
Quack
3.1
public interface QuackBehavior {
public void quack();
}
public class QuackBig implements QuackBehavior{
@Override
public void quack() {
System.out.println("我可以尖叫");
}
}
public class QuackSmall implements QuackBehavior {
@Override
public void quack() {
System.out.println("我可以窃窃私语");
}
}
public class DuckTest {
public static void main(String[] args) {
GreenDuck greenDuck = new GreenDuck();
RedDuck redDuck = new RedDuck();
greenDuck.display();
greenDuck.fly();
greenDuck.quack();
System.out.println("*****");
redDuck.display();
redDuck.fly();
redDuck.quack();
}
}
输出的寄过如下