CS/DesignPattern

[DesignPattern] Service Mediator Pattern

리네엔 2024. 11. 8. 23:12

서비스 소비자와 서비스 제공자간을 중개하여 서로 직접적인 커플링 없이 상호작용 할 수 있도록 한 패턴

1. 서비스 인터페이스 정의

public interface AudioService {
    void playSound();
}

2. 구체적인 서비스 구현


public class MusicService : AudioService
{
    public void PlaySound()
    {

    }
}

public class BGMService : AudioService
{
    public void PlaySound(AudioClip audio)
    {

    }
}

3. 서비스 로케이터 구현


public class ServiceLocator 
{
    private Dictionary<string, IAudioService> serviceRegistry = new Dictionary<string, IAudioService>()

    public static AudioService Provide(string serviceName, IAudioService provide) {
        serviceRegistry[serviceName] = provide;
    }
    public static AudioService GetAudio(string serviceName)
    {
        return serviceRegistry[serviceName];
    }
}

4. 클라이언트 코드


public class PlayerController : MonoBehaviour
{
    [SerializeField] private AudioClip audio;
    void Start()
    {
        ServiceLocator.Provide("BGMAudio",new BGMService())
    }

    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            ServiceLocator.GetAudio("BGMAudio").PlaySound(audio);
        }
    }
}

싱글톤과의 비교

측면 싱글톤 패턴 서비스 중개자 패턴
결합도 높음 (다른 시스템이 직접 오디오 매니저에 의존) 낮음 (중개자를 통해 통신하여 시스템 간 의존성 감소)
유연성 낮음 (오디오 시스템 변경 시 영향이 큼) 높음 (서비스 제공자를 교체하거나 추가하기 용이)
구현 복잡도 낮음 (구현이 간단하고 이해하기 쉬움) 중간 (약간의 복잡도가 있지만 관리 용이)
테스트 용이성 낮음 (전역 상태로 인해 테스트 어려움) 높음 (의존성 분리가 잘 되어 테스트가 용이)

'CS > DesignPattern' 카테고리의 다른 글

[DesignPattern] EventQueue Pattern  (0) 2024.11.07
[DesignPattern] 컴포넌트 패턴  (1) 2024.11.05
[DesignPattern] MVP 패턴  (0) 2024.11.02
[DesignPattern] MVC  (0) 2024.10.31
[DesignPattern] BuilderPattern  (0) 2024.10.25