public interface Fly { void fly(); }
public interface Call { void call(); }
因为飞行和叫声是变化的,会有各种各样的飞行和叫声,所以我们要把不同的飞行和叫声都实现
public class GoodFly implements Fly { @Override public void fly() { System.out.println("飞的好"); } } public class BadFly implements Fly { @Override public void fly() { System.out.println("飞的坏"); } } public class GuaCall implements Call { @Override public void call() { System.out.println("呱呱叫"); } } public class GaCall implements Call { @Override public void call() { System.out.println("嘎嘎叫"); } }
这样我们就有了各种各样的飞行和叫声。
然后我们要创建鸭子的基础类,基础类会持有动作的接口但是没有声明具体的动作
public abstract class Duck { Fly dfly; Call dcall; public Duck(){} public void fly(){ dfly.fly(); } public void call(){ dcall.call(); } }
在基础类的子类中会具体设置是哪一种动作
class GreenHeadDuck extends Duck{ public GreenHeadDuck(){ dcall=new GaCall(); dfly=new GoodFly(); } } public class RedHeadDuck extends Duck { public RedHeadDuck(){ dfly=new BadFly(); dcall=new GuaCall(); } public static void main(String[] args) { Duck rduck=new RedHeadDuck(); rduck.fly(); rduck.call(); Duck gduck=new GreenHeadDuck(); gduck.fly(); gduck.call(); } }
策略模式的注意点:
原文:https://www.cnblogs.com/liuqing666/p/11474258.html