У меня стандартный шаблон стратегии GOF: код клиента содержит ссылку на AbstractStrategy, которая указывает на любую из нескольких ConcreteStrategies, полученных или реализующих AbstractStrategy.Имеет ли этот вариант шаблона стратегии имя?
Один ConcreteStrategy делегатов на любой из нескольких других ConcreteStrategies, в зависимости от его передаваемых параметров, например:
public class ConcreteStrategy0 {
public void doStrategy(SomeType someData) {
switch(somefunc(someData) {
case 0: ConcreteStrategy1.singleton.doStrategy(someData); break;
case 1: ConcreteStrategy2.singleton.doStrategy(someData); break;
default: ConcreteStrategy3.singleton.doStrategy(someData); break;
}
}
Это не совсем Coplien Конверт/Письмо (как намерение не совсем то же самое) ,
Но имеет ли это название?
Коммутатор должен показать, что делает код, а не настаивать на конкретной реализации. На практике, однако, я не знаю, что в рамках реализации ConcreteStrategy я хочу делегировать еще одну иерархию стратегий классов. – tpdi
О, и это не Factory, я не думаю: Factory - это Object Creation pagttern, и здесь ничего не создается, тем более создается тип подкласса. Мы просто выбираем три альтернативы. – tpdi
Хорошо, что оператор switch в вашем примере довольно заметен, поэтому его нельзя просто игнорировать. И это часть дизайна. Задача здесь состоит в том, как избавиться от нее (http://c2.com/cgi/wiki?SwitchStatementsSmell), используя другой более элегантный способ. –