Dúvida na implementação do ActionListener

Boa tarde! pessoal

Meu nome é Renato estudo Java a mais ou menos um ano ultimamente venho estudando bastante sobre as API’s Swing/AWT, a minha dúvida é referente a implementação correta e ideal da inteface ActionListener e estou trabalhando com padrão MVC como podem ver abaixo fiz duas propostas de implementação.

Proposta 1:

package br.com.guj.controller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import br.com.guj.view.PanelButton;

public class ListenerPanel implements ActionListener {

	private PanelButton panel;

	public ListenerPanel(PanelButton panel) {
		this.setPanel(panel);
	}

	public PanelButton getPanel() {
		return panel;
	}

	public void setPanel(PanelButton panel) {
		this.panel = panel;
	}

	@Override
	public void actionPerformed(ActionEvent e) {
		if (e.getActionCommand().equals("Hello")) {
			System.out.println("Hello");
		} else if (e.getActionCommand().equals("Bye")) {
			System.out.println("Bye");
		}
		
	}

}

A minha critica referente a implementação acima está no método actionPerformed(ActionEvent e) que por exemplo: Se for implementar um painel com vários botões terei que criar diversos ifelse deixando o código muito extenso e complexo.

Proposta 2:

package br.com.guj.controller;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import br.com.guj.view.PanelButton;

public class ListenerPanel {

	private PanelButton panel;

	public ListenerPanel(PanelButton panel) {
		this.setPanel(panel);
	}

	public PanelButton getPanel() {
		return panel;
	}

	public void setPanel(PanelButton panel) {
		this.panel = panel;
	}

	public static class BtnHelloClick implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			System.out.println("Hello");
		}
	}

	public static class BtnByeClick implements ActionListener {

		@Override
		public void actionPerformed(ActionEvent e) {
			System.out.println("Bye");
		}
	}

}

A minha segunda proposta acima é a utilização de Inner Class (Classes internas) para fazer os tratamentos dos eventos, só que o problema é quase o mesmo ao anterior, terei que implementar diversas Inner Class que implemente a inteface ActionListener, caso possua diversos botões.

A pergunta é: Qual é a implementação ideal para esses tipos de casos ? Existe algum padrão para esse tipo de implementação ?

Eu optaria pela segunda opção. Manutenção vai ser mais organizada.

Mas mesmos assim, isso ainda num tá totalmente mvc. Veja, a ação só é executada se o botao for clicado. Ou seja, é a visão misturada com o controlador. Você precisa criar uma classe separada para executar cada operação, aí sim você executa essas ações nos seus action performed.

Você diz o PanelButton que indica que não está no MVC ? Será que você poderia postar um exemplo ?