Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 策略模式中的可变参数_Design Patterns_Strategy Pattern - Fatal编程技术网

Design patterns 策略模式中的可变参数

Design patterns 策略模式中的可变参数,design-patterns,strategy-pattern,Design Patterns,Strategy Pattern,有时在使用策略模式时,我发现一些算法实现不需要相同的参数列表 比如说 public interface Strategy{ public void algorithm(int num); } public class StrategyImpl1 implements Strategy{ public void algorithm(int num){ //num is needed in this implementation to ru

有时在使用策略模式时,我发现一些算法实现不需要相同的参数列表

比如说

    public interface Strategy{
     public void algorithm(int num);
    }

    public class StrategyImpl1 implements Strategy{
     public void algorithm(int num){
       //num is needed in this implementation to run algorithm
     }
    }

    public class StrategyImpl2 implements Strategy{
     public void algorithm(int num){
       //num is not needed in this implementation to run algorithm but because im using same
       strategy interface I need to pass in parameter
     }

}

我是否应该使用不同的设计模式?

这通常是可以接受的,尽管如果有一些参数仅由某些实现需要,那么将这些参数提供给实现的构造函数(即,将它们排除在策略接口之外)可能更有意义,尽管在你的情况下这可能不是一个选择

另外,另一个选项是创建一个
参数
类,并让您的策略方法只接受其中一个参数。然后,此类可以为各种参数(即
int num
)提供getter,如果特定实现不需要使用
num
,那么它就不会调用
parameters.getNum()
。这还为您提供了添加新参数的灵活性,而无需更改任何现有的策略实现或接口

话虽如此,像
Parameters
这样的类让我感觉在其他地方出现了抽象失败,尽管有时你只是需要让它工作起来