策略模式:
package com.zoey.allTest.pattern.headFirst.strategyPattern.book;
public abstract class Duck {
FlyBehavior flyBehavior;
QuackBehavior quackBehavior;
public void performQuack(){
quackBehavior.quack();
public void swim(){
System.out.println("all ducks float, even decoys");
}
public abstract void display();
public void performFly(){
flyBehavior.fly();
}
public void setFlyBehavior(FlyBehavior flyBehavior) {
this.flyBehavior = flyBehavior;
}
public void setQuackBehavior(QuackBehavior quackBehavior) {
this.quackBehavior = quackBehavior;
}
}
package com.zoey.allTest.pattern.headFirst.strategyPattern.book;
public interface FlyBehavior {
public void fly();
}
package com.zoey.allTest.pattern.headFirst.strategyPattern.book;
public interface QuackBehavior {
public void quack();
}
package com.zoey.allTest.pattern.headFirst.strategyPattern.book;
public class FlyNoWay implements FlyBehavior {
public void fly() {
System.out.println("no way fly~~~");
}
}
package com.zoey.allTest.pattern.headFirst.strategyPattern.book;
public class FlyWithWings implements FlyBehavior {
public void fly() {
System.out.println("fly~~~");
}
}
package com.zoey.allTest.pattern.headFirst.strategyPattern.book;
public class Quack implements QuackBehavior {
public void quack() {
System.out.println("gua gua ~~~");
}
}
package com.zoey.allTest.pattern.headFirst.strategyPattern.book;
public class Squeak implements QuackBehavior {
public void quack() {
System.out.println("zhi zhi ~~~");
}
}
package com.zoey.allTest.pattern.headFirst.strategyPattern.book;
public class FlyRocketPowered implements FlyBehavior {
public void fly() {
System.out.println("flying with rocket");
}
}
package com.zoey.allTest.pattern.headFirst.strategyPattern.book;
public class MallardDuck extends Duck {
public MallardDuck() {
quackBehavior = new Quack();
flyBehavior = new FlyWithWings();
}
public void display() {
System.out.println("real mallard duck.");
}
}
package com.zoey.allTest.pattern.headFirst.strategyPattern.book;
public class ModelDuck extends Duck {
public ModelDuck() {
flyBehavior = new FlyNoWay();
quackBehavior = new Quack();
}
@Override
public void display() {
System.out.println("model duck");
}
}
package com.zoey.allTest.pattern.headFirst.strategyPattern.book;
public class MiniDuckSimulator {
public static void main(String[] args) {
Duck ma = new MallardDuck();
ma.performFly();
ma.performQuack();
System.out.println("------------------");
Duck model = new ModelDuck();
model.performFly();
model.setFlyBehavior(new FlyRocketPowered());
model.performFly();
}
}
本文通过鸭子的行为模拟,详细介绍了策略模式的设计理念与实现方式。展示了如何通过定义一系列算法,并将每个算法封装起来,使它们可以互相替换,从而让算法的变化独立于使用算法的客户。
1242

被折叠的 条评论
为什么被折叠?



