O padrão de design Delegate (ou Delegate Pattern) é um padrão de design de software que permite a um objeto delegar a responsabilidade de um determinado processo para outro objeto. Ele é comumente usado em situações onde um objeto precisa executar uma função, mas não pode ou não quer executá-la diretamente. Em vez disso, ele delega essa responsabilidade para um objeto especializado, conhecido como delegado.
Como funciona o Delegate Pattern:
- Objeto Delegador (Delegator): É o objeto que contém uma referência para o objeto delegado. Ele possui um método ou métodos que precisam realizar uma operação específica.
- Objeto Delegado (Delegate): É o objeto que realiza a operação delegada. Ele contém a implementação real da função que o objeto delegador deseja executar.
Exemplo em Java:
Vamos imaginar um cenário onde temos um objeto VideoPlayer
que precisa reproduzir vídeos de diferentes formatos. Em vez de implementar a lógica de reprodução diretamente no VideoPlayer
, podemos usar o Delegate Pattern para delegar a reprodução para um objeto especializado, como AviPlayer
, Mp4Player
, etc., dependendo do formato do vídeo.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
// Interface que define o comportamento do player de vídeo interface VideoPlayer { void play(String videoFile); } // Implementação do player de vídeo para arquivos AVI class AviPlayer implements VideoPlayer { @Override public void play(String videoFile) { System.out.println("Reproduzindo arquivo AVI: " + videoFile); // Lógica específica para reproduzir arquivos AVI } } // Implementação do player de vídeo para arquivos MP4 class Mp4Player implements VideoPlayer { @Override public void play(String videoFile) { System.out.println("Reproduzindo arquivo MP4: " + videoFile); // Lógica específica para reproduzir arquivos MP4 } } // Classe que utiliza o Delegate Pattern para reproduzir vídeos class VideoPlayerClient { private VideoPlayer videoPlayer; public VideoPlayerClient(VideoPlayer player) { this.videoPlayer = player; } public void playVideo(String videoFile) { videoPlayer.play(videoFile); } } // Exemplo de uso public class Main { public static void main(String[] args) { // Criando um cliente de player de vídeo para AVI VideoPlayerClient client1 = new VideoPlayerClient(new AviPlayer()); client1.playVideo("video.avi"); // Criando um cliente de player de vídeo para MP4 VideoPlayerClient client2 = new VideoPlayerClient(new Mp4Player()); client2.playVideo("video.mp4"); } } |
Neste exemplo:
VideoPlayer
é a interface que define o métodoplay
para reproduzir vídeos.AviPlayer
eMp4Player
são implementações concretas deVideoPlayer
, cada um com sua própria implementação de como reproduzir vídeos de seus formatos específicos.VideoPlayerClient
é o objeto delegador que contém uma referência a um objetoVideoPlayer
e delega a responsabilidade de reprodução para ele.
O Delegate Pattern ajuda a separar preocupações e promove um design mais flexível e extensível, onde novas implementações de reprodução de vídeo podem ser adicionadas sem modificar diretamente o cliente (objeto delegador).
Deixe um comentário