如何实现自动查找策略的工厂

bot*_*wer 5 c# oop design-patterns

我问自己这个问题,我还没有想到这个.

我在想什么

当您拥有策略模式时,许多实现也使用工厂模式来检索特定策略.互联网上的大多数工厂示例都使用switch或if语句.当您不经常更改或添加策略时,这非常有效.但是,如果工厂用于动态查找策略并且策略经常更改和添加,该怎么办?那么这是程序员的全职工作.现在我有一种情况,我只想添加一个新的策略而不必更改工厂.换句话说,如何实现工厂模式,以便动态搜索策略.我如何列出所有可用的策略.

问题

当我在互联网上寻找这个时,我找不到一个合适的解决方案.我正在考虑使用反射库来执行此操作,但不建议在我看到的任何地方使用反射.那么如何实现动态工厂呢.或者是否有其他模式用于此目的?

策略: 在此输入图像描述

工厂:

public enum StrategyName { ImplementedStrategy1, ImplementedStrategy2, ImplementedStrategy3 };

public class StrategyFactory
{
    public static Sniffer getInstance(StrategyName choice) {

        Strategy strategy = null;

        switch (choice) {
            case StrategyName.ImplementedStrategy1:
                strategy = new ImplementedStrategy1();
                break;
            case StrategyName.ImplementedStrategy2:
                strategy = new ImplementedStrategy2();
                break;
            case StrategyName.ImplementedStrategy3:
                strategy = new ImplementedStrategy3();
                break;
        }

        return strategy;
    }
}
Run Code Online (Sandbox Code Playgroud)

现在我该如何让这种动态变化?或者为什么我不应该?

GWL*_*osa 2

让你的ImplementedStrategy合同包含一个IsGoodMatch(params)方法。然后,您只需迭代策略集合,调用IsGoodMatch每一个策略,直到获得一个(或多个)结果,然后使用该策略。