本文共 3197 字,大约阅读时间需要 10 分钟。
在鸭子设计模式中,Customer类持有一个strategy对象或相关策略接口。通过构造器可以指定使用的策略,从而实现不同的行为选择和.Example:
系统需求包括以下几个方面:
通过策略模式设计,主要特征为:
// 鸭子抽象类public abstract class Duck { protected FlyBehavior flyBehavior; 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 interface FlyBehavior { void fly();}// 不同鸭子接口实现类public class WildDuck extends Duck { public WildDuck() { flyBehavior = new GoodFlyBehavior(); } @Override public void display() { System.out.println("这是野鸭...."); }}public class PekingDuck extends Duck { public PekingDuck() { flyBehavior = new BadFlyBehavior(); } @Override public void display() { System.out.println("这是北京鸭子..."); }}public class ToyDuck extends Duck { public ToyDuck() { flyBehavior = new NoFlyBehavior(); } @Override public void display() { System.out.println("这是玩具鸭..."); } @Override public void quack() { System.out.println("玩具鸭不能叫..."); } @Override public void swim() { System.out.println("玩具鸭不能游泳..."); }}// 不同飞行行为实现类public class GoodFlyBehavior implements FlyBehavior { @Override public void fly() { System.out.println("飞翔技术高超..."); }}public class BadFlyBehavior implements FlyBehavior { @Override public void fly() { System.out.println("飞翔技术一般..."); }}public class NoFlyBehavior implements FlyBehavior { @Override public void fly() { System.out.println("不会飞..."); }}// 客户端public class StrategyDemo { public static void main(String[] args) { // 创建不同鸭子实例 WildDuck wildDuck = new WildDuck(); wildDuck.fly(); PekingDuck pekingDuck = new PekingDuck(); pekingDuck.fly(); ToyDuck toyDuck = new ToyDuck(); toyDuck.fly(); // 更换鸭子的飞行策略 pekingDuck.setFlyBehavior(new NoFlyBehavior()); pekingDuck.fly(); }} 在JDK中,策略模式主要体现在Arrays.sort()方法的实现中。这个方法利用Comparator接口作为策略,通过动态选择合适的比较策略来排序数据。具体实现方式如下:
public class Arrays { public static void sort(Object[] a, Comparator c) { // 详细实现代码 }} Comparator接口在这里充当策略角色,其核心作用是定义和提供具体的比较逻辑。不同的Comparator实例决定了排序的策略,系统可以通过动态地选择和切换不同的Comparator,从而改变排序的行为。
Comparator实现类即可。Comparator不影响彼此的比较过程,系统保持稳定性。通过这种设计,JDK在效率和功能上达到了更好的平衡,为Java的排序算法提供了灵活的解决方案。
策略模式通过将通用行为模式与具体实现方式分离开来,为系统提供了灵活的行为选择机制。在鸭子设计模式中,策略模式展示了如何通过动态设置不同的鸭鸟行为策略,实现便于扩展、易于维护的设计。在JDK的实现中,策略模式点亮了Comparator接口的重要性,展示了其在性能和功能上的双重价值。这种设计思路为应用程序的灵活配置和扩展奠定了坚实基础。
转载地址:http://kmbcz.baihongyu.com/