Head First設計模式:策略模式
阿新 • • 發佈:2019-01-07
策略模式:
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();
}
}