设计模式学习--策略模式(Strategy Pattern) (三)

2014-11-24 11:10:39 · 作者: · 浏览: 2
attern;

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设计必须具备可复用、可扩充、可维护三个特性。模式是前人历经验证的经验,可以用来解决程序设计当中的各种问题。