Ну, во-первых, у вас там нет экземпляра шаблона стратегии. Strategy Pattern позволяет динамическую спецификацию метода для выполнения. То, что у вас здесь, - это действительно более стандартный дизайн интерфейса, где вы распределяете обязанности и способности с помощью наследования интерфейса.
Редактировать: Давайте использовать пример. Предположим, что у вас есть группа Рабочих; у вас также есть набор задач. Каждый Рабочий может выполнять Задачу. Эти Задачи могут состоять из нескольких вещей, таких как DoFoo() и DoBar(). Каждый Рабочий не знает, какую Задачу они будут выполнять; они просто знают, когда обнаруживают, что они будут делать Задачу.
Таким образом, мы хотим, чтобы Рабочие работали с задачей, которую они будут выполнять. Поскольку задачи различаются в широких пределах, мы реализуем задачу как интерфейс.
Таким образом, мы будем иметь:
public class Worker
{
public Task myTask;
public Worker(Task task)
{
myTask = task;
}
public void DoWork()
{
myTask.DoTask();
}
}
}
Interface Task
{
void DoTask();
}
public class Task1 : Task
{
public void DoTask()
{
// Do whatever Task1 will do
}
}
public class Task2 : Task
{
public void DoTask()
{
// Do whatever Task2 will do
}
}
public class Job
{
public List<Worker> workers;
public void Job()
{
workers.Add(new Worker(new Task1()));
workers.Add(new Worker(new Task2()));
}
public void DoJob()
{
foreach (Worker worker in workers)
{
worker.DoWork();
}
}
public void ChangeJobsToTask1()
{
foreach (Worker worker in workers)
{
worker.myTask = new Task1();
}
}
public void ChangeJobsToTask2()
{
foreach (Worker worker in workers)
{
worker.myTask = new Task2();
}
}
}
Так что же происходит, что, когда мы создаем Job
, то Job
создает два Worker
с. Первый Worker
имеет задание Task1
; второй Worker
имеет задание Task2
. Для того, чтобы Worker
s сделать их Task
с, мы называем DoJob()
метод на Job
класса, который только называет DoWork()
метод на каждом из Worker
с, что в свою очередь вызывает метод DoTask()
на каждом из Task
с, что Worker
s были установлены с.
Если мы хотим изменить Worker
с, чтобы все сделать Task1
, мы называем ChangeJobsToTask1()
метод, который устанавливает Task
к Task1
для всех Worker
объектов, содержащихся в Job
; если в этот момент мы назовем DoJob()
на объекте Job
, все Worker
s выполнит задачу Task1
. Аналогичным образом, если мы хотим изменить Task
s на Task2
, просто вызовите метод ChangeJobsToTask2()
; то все Worker
s будут выполнять Task2.DoTask()
, когда вызывается их метод DoWork()
.
Важным пунктом абстракции здесь является то, что Worker
s выставляют метод DoWork()
, но они не обязательно знают, что это за работа. То есть, Task
s для Worker
s являются взаимозаменяемыми; Worker
s просто знают, что они собираются сделать Task
, но особенности того, что это не имеет значения для Worker
.
TeamMamber: командный игрок (пишется ошибка, я думаю) –