Принцип инверсии зависимостей (DIP) в C# реализуется через Dependency Injection (DI) и контейнеры сервисов. Такой подход отделяет высокоуровневые модули от низкоуровневых реализаций, что улучшает гибкость и тестируемость.
Сначала определи интерфейс, который представляет абстракцию:
public interface IAudioDecoder
{
void Decode();
}
Этот интерфейс служит контрактом, который должны соблюдать все конкретные реализации.
Создай конкретные реализации для каждого аудиоформата:
public class MP3Decoder : IAudioDecoder
{
public void Decode() { /* логика декодирования MP3 */ }
}
public class WAVDecoder : IAudioDecoder
{
public void Decode() { /* логика декодирования WAV */ }
}
Класс MusicPlayer зависит от абстракции (IAudioDecoder), а не от конкретных реализаций:
public class MusicPlayer
{
private readonly IAudioDecoder _decoder;
public MusicPlayer(IAudioDecoder decoder)
{
_decoder = decoder;
}
public void PlayMusic()
{
_decoder.Decode();
}
}
Передай нужный декодер во время выполнения:
var mp3Player = new MusicPlayer(new MP3Decoder());
mp3Player.PlayMusic();
var wavPlayer = new MusicPlayer(new WAVDecoder());
wavPlayer.PlayMusic();
MusicPlayer не зависит от конкретных типов декодеровПринцип инверсии зависимостей требует, чтобы высокоуровневые модули зависели непосредственно от конкретных низкоуровневых реализаций, а не от абстракций.
Новый — ещё не проверен сообществом
Вы