Лучший шаблон проектирования для алгоритмов с разным количеством входных параметров - PullRequest
0 голосов
/ 25 мая 2018

Я пытаюсь помочь своему другу с его проектом, и, делая это, я увидел, что у него реализовано 2 почти похожих алгоритма.

Моей первой мыслью было использование шаблона.

public abstract class Template {
    calculate();
    save();
}

и так далее.Однако во втором алгоритме calculate() и save() нужны дополнительные параметры.Код внутри обоих методов в обоих алгоритмах дублируется на 90%.

Допустим, в первом алгоритме мне нужна только долгота, а во второй долготе и широте.

Таким образом, единственный способ сделать это с шаблоном Template - это создать некоторый объект с долготой и широтой и передать его в обоих алгоритмах.Однако мне не нравится это решение из-за того, что в первом алгоритме вторые параметры будут нулевыми.

Может быть, я не вижу лучшего, более чистого способа решения этой проблемы?

Ответы [ 2 ]

0 голосов
/ 25 мая 2018

Вы можете иметь свой шаблон, но вы можете передать объект типа Calculator и иметь калькуляторы с разным количеством параметров, например, сделайте так:

public class Template {
    calculate(ICalculator calculator);       
}

interface ICalculator(){
  double calculate();
}

Тогда вы можете иметь типы калькуляторов:

class OneParameterCalculator implements ICalculator{

 private final double latitude;

 public OneParameterCalculator(double latitude){ this.latitude=latitude; }

 public double calculate(){
 ....
 }
}

class TwoParameterCalculator implements ICalculator{

 private final double latitude;
 private final double longtitude;

public TwoParameterCalculator (double latitude,double longtitude){ this.latitude=latitude; this.longtitude=longtitude; }

 public double calculate(){
 ....
 }
}

И тогда вы можете использовать экземпляры вашего шаблона, например:

myTemplate.calculate(new OneParameterCalculator(latitudeValue));

Таким образом вы отделяете расчет от шаблона.И вы можете улучшить ситуацию - например, вы можете поделиться калькулятором вместо того, чтобы каждый раз создавать новый экземпляр.

0 голосов
/ 25 мая 2018

Вы можете попробовать объединить «Метод шаблона» с шаблоном «Стратегия».Обе модели касаются алгоритма с двух разных точек зрения: стратегия о возможности обмена алгоритма во время выполнения и шаблонный метод о гибкой структуре алгоритма.

Что касается разного количества параметров, выможно использовать метод перегрузки / телескопирования или использовать класс-оболочку для параметров + шаблон Builder.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...