public class DecoyDuck extends Duck{
public DecoyDuck(){
}
@Override
public void display() {
System.out.println("I'm a DecoyDuck!!!"); //我是一只诱饵鸭
}
}
package strategyPattern;
public class DecoyDuck extends Duck{
public DecoyDuck(){
}
@Override
public void display() {
System.out.println("I'm a DecoyDuck!!!"); //我是一只诱饵鸭
}
}
测试类:
[java]
package strategyPattern;
public class MiniDuckSimulator {
public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.performFly();
//动态改变模型鸭的行为--通过调用继承来的setter方法
Duck model = new ModelDuck();
model.performFly();
model.setFlyBehavior(new FlyRocketPowered()); //委托
model.performFly();
}
}
package strategyPattern;
public class MiniDuckSimulator {
public static void main(String[] args) {
Duck mallard = new MallardDuck();
mallard.performQuack();
mallard.performFly();
//动态改变模型鸭的行为--通过调用继承来的setter方法
Duck model = new ModelDuck();
model.performFly();
model.setFlyBehavior(new FlyRocketPowered()); //委托
model.performFly();
}
}
测试结果:
[java]
Quack
I'm flying!
I can't fly
I'm flying with a rocket!
Quack
I'm flying!
I can't fly
I'm flying with a rocket!
确实,使用策略模式之后,代码变得可复用了,可以适应更多的变化,而不会互相影响。良好的oo设计必须具备可复用、可扩充、可维护三个特性。模式是前人历经验证的经验,可以用来解决程序设计当中的各种问题。