赞
踩
package com.jinxu.strategy; public abstract class Duck { public Duck() { } public abstract void display();//显示鸭子信息 public void quack() { System.out.println("鸭子嘎嘎叫~~"); } public void swim() { System.out.println("鸭子会游泳~~"); } public void fly() { System.out.println("鸭子会飞翔~~~"); } }
package com.jinxu.strategy; public class PekingDuck extends Duck { @Override public void display() { System.out.println("~~北京鸭~~~"); } //因为北京鸭不能飞翔,因此需要重写fly @Override public void fly() { System.out.println("北京鸭不能飞翔"); } }
package com.jinxu.strategy; public class ToyDuck extends Duck{ @Override public void display() { System.out.println("玩具鸭"); } //需要重写父类的所有方法 public void quack() { System.out.println("玩具鸭不能叫~~"); } public void swim() { System.out.println("玩具鸭不会游泳~~"); } public void fly() { System.out.println("玩具鸭不会飞翔~~~"); } }
package com.jinxu.strategy;
public class WildDuck extends Duck {
@Override
public void display() {
System.out.println(" 这是野鸭 ");
}
}
说明:从上图可以看到,客户 context有成员变量 strategy或者其他的策略接口,至于需要使用到哪个策略,我们可以在构造器中指定。
package com.jinxu.strategy.improve;
public class BadFlyBehavior implements FlyBehavior {
@Override
public void fly() {
System.out.println(" 飞翔技术一般 ");
}
}
package com.jinxu.strategy.improve; public class Client { public static void main(String[] args) { WildDuck wildDuck = new WildDuck(); wildDuck.fly();// ToyDuck toyDuck = new ToyDuck(); toyDuck.fly(); PekingDuck pekingDuck = new PekingDuck(); pekingDuck.fly(); //动态改变某个对象的行为, 北京鸭 不能飞 pekingDuck.setFlyBehavior(new NoFlyBehavior()); System.out.println("北京鸭的实际飞翔能力"); pekingDuck.fly(); } }
package com.jinxu.strategy.improve; public abstract class Duck { //属性, 策略接口 FlyBehavior flyBehavior; //其它属性<->策略接口 QuackBehavior quackBehavior; public Duck() { } public abstract void display();//显示鸭子信息 public void quack() { System.out.println("鸭子嘎嘎叫~~"); } public void swim() { System.out.println("鸭子会游泳~~"); } public void fly() { //改进 if(flyBehavior != null) { flyBehavior.fly(); } } public void setFlyBehavior(FlyBehavior flyBehavior) { this.flyBehavior = flyBehavior; } public void setQuackBehavior(QuackBehavior quackBehavior) { this.quackBehavior = quackBehavior; } }
package com.jinxu.strategy.improve;
public interface FlyBehavior {
void fly(); // 子类具体实现
}
package com.jinxu.strategy.improve;
public class GoodFlyBehavior implements FlyBehavior {
@Override
public void fly() {
System.out.println(" 飞翔技术高超 ~~~");
}
}
package com.jinxu.strategy.improve;
public class NoFlyBehavior implements FlyBehavior{
@Override
public void fly() {
System.out.println(" 不会飞翔 ");
}
}
package com.jinxu.strategy.improve; public class PekingDuck extends Duck { //假如北京鸭可以飞翔,但是飞翔技术一般 public PekingDuck() { // TODO Auto-generated constructor stub flyBehavior = new BadFlyBehavior(); } @Override public void display() { System.out.println("~~北京鸭~~~"); } }
package com.jinxu.strategy.improve;
public interface QuackBehavior {
void quack();//子类实现
}
package com.jinxu.strategy.improve; public class ToyDuck extends Duck{ public ToyDuck() { // TODO Auto-generated constructor stub flyBehavior = new NoFlyBehavior(); } @Override public void display() { System.out.println("玩具鸭"); } //需要重写父类的所有方法 public void quack() { System.out.println("玩具鸭不能叫~~"); } public void swim() { System.out.println("玩具鸭不会游泳~~"); } }
package com.jinxu.strategy.improve; public class WildDuck extends Duck { //构造器,传入FlyBehavor 的对象 public WildDuck() { // TODO Auto-generated constructor stub flyBehavior = new GoodFlyBehavior(); } @Override public void display() { System.out.println(" 这是野鸭 "); } }
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。