面向接口编程 package com.ch; /** * 鸭子接口类 * @author test */ public abstract class Duck { FlyBehavior flyBehavior; QuackBehavior quackBehavior; public void setFlyBehavior(FlyBehavior fb) { flyBehavior = fb; } public void setQuackBehavior(QuackBehavior qb) { quackBehavior = qb; } void performQuack(){ quackBehavior.quack(); } void performFly(){ flyBehavior.fly(); } void swim(){//游泳 System.out.println("游泳ing..."); } abstract void display(); //展示外观 }
package com.ch; public interface FlyBehavior { void fly(); //飞行动作 }
package com.ch; public interface QuackBehavior { void quack(); //叫声 }
package com.ch; public class FlyNoWay implements FlyBehavior{ @Override public void fly() { System.out.println("我是不会飞的鸭子"); } }
package com.ch; public class FlyWithWings implements FlyBehavior{ @Override public void fly() { System.out.println("我是会飞的鸭子"); } }
package com.ch; public class Quack implements QuackBehavior{ @Override public void quack() { System.out.println("呱呱叫"); } }
package com.ch; public class Squeak implements QuackBehavior{ @Override public void quack() { System.out.println("吱吱叫"); } }
package com.ch; public class MallardDuck extends Duck { public MallardDuck() { quackBehavior = new Quack(); flyBehavior = new FlyWithWings(); } @Override void display() { System.out.println("...."); } }