Могут ли две стратегии в шаблоне стратегии использовать один и тот же код? Это делает его шаблоном? - PullRequest
0 голосов
/ 09 июля 2020

У меня есть программа для передачи файлов с одного компьютера на другой, которая использует 4 разных класса A, B, C и D. Моя программа создает объект и использует A и B для проверки и проверки файлов, которые нужно отправить. Теперь мне нужно добавить дополнительную технику переноса. Я предполагаю, что использование шаблона стратегии было бы лучшим сценарием, поскольку мы можем выбрать любой из методов передачи. Но я хотел спросить, можем ли мы использовать классы A и B для проверки передачи файлов в моей стратегии? Делает ли это шаблон проектирования, а не шаблон разработки стратегии?

1 Ответ

0 голосов
/ 10 июля 2020

Если ваши стратегии довольно сложны и имеют общую схему (т.е. часть проверки), вы можете иметь шаблон стратегии, который выполняет проверку, тогда как каждый конкретный класс стратегии делает все остальное:

public interface ITransferFileStrategy {
     bool TransferFile(File f);
}

public abstract class TransferFileStrategyTemplate {
     public bool TransferFile(File f) {
         if (!ValidateFile(f)) return false;
         return TransferFileInner(f);
     }
     protected virtual bool ValidateFile(File f) {
        //implement it here
     }

     protected abstract bool TransferFileInner(File f);
}

public class TransferFileStrategyA {
    protected override bool TransferFileInner(File f) { ... }
}

вы могли даже используйте вложенную стратегию (IValidationStrategy) в TransferFileStrategyTemplate для обработки проверки, если вы знаете, что будут разные виды проверок.

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