Sobes.tech
Junior — Middle

Pouvez-vous donner un exemple de quand le patron Strategy est utilisé pour implémenter le comportement des objets?

sobes.tech IA

Réponse de l'IA

Паттерн Strategy позволяет менять поведение объекта во время выполнения, инкапсулируя алгоритмы в отдельные классы и делегируя им выполнение.

Пример: допустим, у нас есть игра, где персонаж может двигаться разными способами — ходить, бегать, летать. Вместо множества условных операторов, мы создаём интерфейс IMoveStrategy и разные реализации:

interface IMoveStrategy {
    void Move();
}

class WalkStrategy : IMoveStrategy {
    public void Move() {
        Console.WriteLine("Персонаж идёт пешком");
    }
}

class FlyStrategy : IMoveStrategy {
    public void Move() {
        Console.WriteLine("Персонаж летит");
    }
}

class Character {
    private IMoveStrategy moveStrategy;

    public Character(IMoveStrategy strategy) {
        moveStrategy = strategy;
    }

    public void SetMoveStrategy(IMoveStrategy strategy) {
        moveStrategy = strategy;
    }

    public void Move() {
        moveStrategy.Move();
    }
}

// Использование
var character = new Character(new WalkStrategy());
character.Move(); // Персонаж идёт пешком
character.SetMoveStrategy(new FlyStrategy());
character.Move(); // Персонаж летит

Такой подход упрощает расширение и изменение поведения без изменения кода класса персонажа.