Reguła DRY - dodawanie actionlistenerow

0

Cześć,

Mam pewien problem, który prawdopodobnie narusza regułę DRY i niestety nie wiem jak go rozwiązać. W mojej części view mam np. 10 buttonów i actionlistenery dodawałem w ten sposób:

	public void addNazwaButtonaListener(ActionListener listenForNazwaButtona)
	{
		nazwaButtona.addActionListener(listenForNazwaButtona);
	}

Teraz w części controller dodaje actionlistenera:

addNazwaButtonaListener(new NazwaButtonaListener());
	class NazwaButtonaListener implements ActionListener
	{
		@Override
		public void actionPerformed(ActionEvent event)
		{
			
		}
	}

Teraz się tak zastanawiam, że chyba nie jest to najlepsze rozwiązanie, a niestety nie wiem jak to rozwiązać nie powtarzając tyle kodu.

dodanie znaczników <code class="java"> - furious programming

0

Sama jestem początkująca, ale moim zdaniem to dobry sposób. Jeżeli masz Java 8.0 to możesz jeszcze wykorzystać lambda. Może to coś małego a angażujesz MVC i wydaje Ci się, że naruszasz tą regułę?

import javax.swing.*;
import java.awt.*;
import java.awt.event.ActionListener;
import java.util.Observable;
import java.util.Observer;

class Model extends Observable {
	private String direction;

	public void setDirection(String direction) {
		this.direction = direction;
		setChanged();
		notifyObservers();
	}

	public String getDirection() { return direction; }
}

class Controller {
	private Model model;
	private View view;

	public Controller(Model model, View view) {
		this.model = model;
		this.view = view;

		model.addObserver(view);

		view.addBtnLeftActionListener((a) -> left());
		view.addBtnRightActionListener((a) -> right());
	}

	public void left() { model.setDirection("left"); }
	public void right() { model.setDirection("right"); }
}

class View extends JFrame implements Observer {
	private JLabel lblDirection;
	private JButton btnLeft;
	private JButton btnRight;
	private Model model;

	public View(Model model) {
		this.model = model;
		getContentPane().setLayout(new BorderLayout());
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		setSize(200, 100);

		btnLeft = new JButton("Left");
		btnRight = new JButton("Right");
		lblDirection = new JLabel(model.getDirection());

		getContentPane().add(btnLeft,BorderLayout.WEST);
		getContentPane().add(lblDirection,BorderLayout.CENTER);
		getContentPane().add(btnRight,BorderLayout.EAST);
	}

	public void addBtnLeftActionListener(ActionListener a) {
		btnLeft.addActionListener(a);
	}

	public void addBtnRightActionListener(ActionListener a) {
		btnRight.addActionListener(a);
	}

	@Override
	public void update(Observable o, Object arg) {
		lblDirection.setText(model.getDirection());
	}
}

public class Main {
	public static void main(String[] args) {
		Model model = new Model();
		View view = new View(model);
		Controller controller = new Controller(model,view);
		view.setVisible(true);
	}
}
0

Ok rozumiem, miałem pewne obawy, że jak będę 10 razy pisał to samo w innym kontekście to naruszę zasadę DRY. Dzięki za odpowiedź.

1 użytkowników online, w tym zalogowanych: 0, gości: 1