Java 枚举实现策略模式

Java 枚举实现策略模式

策略模式是一种常见的设计模式,它可以将算法的实现与使用它的代码分离,从而实现更好的代码重用和扩展性。Java中可以使用枚举来实现策略模式,下面是一个基于枚举和工厂方法的策略模式实现的代码:

  1. 定义共同行为接口:
public interface IStrategy {
    void doSomething();
}
  1. 具体策略实现类:
public class ConcreteStrategyA implements IStrategy {
    @Override
    public void doSomething() {
        System.out.println("ConcreteStrategyA.doSomething()");
    }
}

public class ConcreteStrategyB implements IStrategy {
    @Override
    public void doSomething() {
        System.out.println("ConcreteStrategyB.doSomething()");
    }
}

public class ConcreteStrategyC implements IStrategy {
    @Override
    public void doSomething() {
        System.out.println("ConcreteStrategyC.doSomething()");
    }
}
  1. 定义枚举,保存策略实现类具体路径:
public enum StrategyEnum {
    STRATEGY_A(ConcreteStrategyA.class),
    STRATEGY_B(ConcreteStrategyB.class),
    STRATEGY_C(ConcreteStrategyC.class);

    private Class<? extends IStrategy> strategyClass;

    StrategyEnum(Class<? extends IStrategy> strategyClass) {
        this.strategyClass = strategyClass;
    }

    public IStrategy getStrategy() {
        try {
            return strategyClass.newInstance();
        } catch (InstantiationException | IllegalAccessException e) {
            throw new RuntimeException(e);
        }
    }
}
  1. 策略工厂:
public class StrategyFactory {
    public static IStrategy getStrategy(StrategyEnum strategyEnum) {
        return strategyEnum.getStrategy();
    }
}
  1. 使用策略工厂获取具体策略实现:
public class Client {
    public static void main(String[] args) {
        IStrategy strategyA = StrategyFactory.getStrategy(StrategyEnum.STRATEGY_A);
        strategyA.doSomething();

        IStrategy strategyB = StrategyFactory.getStrategy(StrategyEnum.STRATEGY_B);
        strategyB.doSomething();

        IStrategy strategyC = StrategyFactory.getStrategy(StrategyEnum.STRATEGY_C);
        strategyC.doSomething();
    }
}

这样,我们就可以使用枚举和工厂方法来实现策略模式。这种实现方式的优点是:

  • 可以避免使用大量的if-else语句。
  • 代码可读性高,易于维护和扩展。
  • 可以通过枚举来管理策略,方便管理和使用。

需要注意的是,使用枚举实现策略模式时,枚举中的每个元素都应该与一个具体的策略实现类对应,这个实现类应该实现策略接口。同时,枚举中应该提供一个方法来获取对应的策略实现类,这个方法可以使用工厂方法来实现。在使用时,只需要通过枚举元素来获取对应的策略实现类,然后调用策略接口。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中的枚举可以用作策略模式中的策略类。策略模式的目的是定义一系列算法,将每个算法都封装起来,并且使它们之间可以互换。枚举可以用作策略模式中的策略类,因为枚举常量是唯一的,并且可以很方便地用于选择特定的算法。 例如,我们可以定义一个枚举类型来表示不同的排序算法: ``` public enum SortType { BUBBLE_SORT, QUICK_SORT, MERGE_SORT } ``` 然后,我们可以定义一个接口来表示排序算法的策略: ``` public interface SortStrategy { void sort(int[] array); } ``` 接下来,我们可以为每个枚举实现一个具体的策略: ``` public class BubbleSortStrategy implements SortStrategy { @Override public void sort(int[] array) { // 实现冒泡排序算法 } } public class QuickSortStrategy implements SortStrategy { @Override public void sort(int[] array) { // 实现快速排序算法 } } public class MergeSortStrategy implements SortStrategy { @Override public void sort(int[] array) { // 实现归并排序算法 } } ``` 最后,我们可以在客户端代码中使用枚举策略模式来选择特定的排序算法: ``` public class SortClient { public static void main(String[] args) { SortType sortType = SortType.QUICK_SORT; SortStrategy sortStrategy = null; switch (sortType) { case BUBBLE_SORT: sortStrategy = new BubbleSortStrategy(); break; case QUICK_SORT: sortStrategy = new QuickSortStrategy(); break; case MERGE_SORT: sortStrategy = new MergeSortStrategy(); break; } int[] array = {5, 3, 1, 4, 2}; sortStrategy.sort(array); } } ``` 在这个示例中,我们使用枚举来选择排序算法,并使用策略模式来封装算法的实现

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值