Hallo,
In den letzten Tagen habe ich mich ein wenig mit der MVC Architektur auseinandergesetzt, zur Übung wurde ein kleines Programm geschrieben (Calculator - kann zwei natürliche Zahlen Addieren, Subtrahieren, Multiplizieren oder Dividieren).
Wäre nett wenn jemand die Zeit und Lust dazu hat sich das einmal anzuschauen und mir mitzuteilen ob die MVC Architektur richtig umgesetzt wurde.
Model
	
	
	
	
	
		
	
	
	
	
	
	
		
	
	
	
	
	
	
		
	
	
	
	
	
	
		
	
View
	
	
	
	
	
		
	
Controller
	
	
	
	
	
		
	
Gruß
			
			In den letzten Tagen habe ich mich ein wenig mit der MVC Architektur auseinandergesetzt, zur Übung wurde ein kleines Programm geschrieben (Calculator - kann zwei natürliche Zahlen Addieren, Subtrahieren, Multiplizieren oder Dividieren).
Wäre nett wenn jemand die Zeit und Lust dazu hat sich das einmal anzuschauen und mir mitzuteilen ob die MVC Architektur richtig umgesetzt wurde.
Model
		Java:
	
	package calculator.model;
import java.util.ArrayList;
public class CalculatorModel implements Calculator {
	private ArrayList<CalculatorObserver> observers = new ArrayList<CalculatorObserver>();
	private int result;
	@Override
	public void addition(int summand1, int summand2) {
		result = summand1 + summand2;
		for (CalculatorObserver observer : observers) {
			observer.newResult(new CalculatorEvent(result));
		}
	}
	@Override
	public void subtraction(int minuend, int subtrahend) {
		result = minuend - subtrahend;
		for (CalculatorObserver observer : observers) {
			observer.newResult(new CalculatorEvent(result));
		}
	}
	@Override
	public void multiplication(int multiplier, int multiplicand) {
		result = multiplier * multiplicand;
		for (CalculatorObserver observer : observers) {
			observer.newResult(new CalculatorEvent(result));
		}
	}
	@Override
	public void division(int dividend, int divisor) {
		result = dividend / divisor;
		for (CalculatorObserver observer : observers) {
			observer.newResult(new CalculatorEvent(result));
		}
	}
	@Override
	public void addCalculatorObserver(CalculatorObserver observer) {
		this.observers.add(observer);
	}
}
		Java:
	
	package calculator.model;
public interface Calculator {
    public void addition(int summand1, int summand2);
    public void subtraction(int minuend, int subtrahend);
    public void multiplication(int multiplier, int multiplicand);
    public void division(int dividend, int divisor);
    public void addCalculatorObserver(CalculatorObserver observer);
}
		Java:
	
	package calculator.model;
public interface CalculatorObserver {
    public void newResult(CalculatorEvent event);
}
		Java:
	
	package calculator.model;
public class CalculatorEvent {
	private int result;
	public CalculatorEvent(int result) {
		this.result = result;
	}
	public int getResult() {
		return result;
	}
}View
		Java:
	
	package calculator.view;
import java.awt.GridBagConstraints;
import java.awt.GridBagLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import calculator.controller.CalculatorController;
import calculator.model.CalculatorEvent;
import calculator.model.CalculatorObserver;
public class CalculatorView implements ActionListener, CalculatorObserver {
	private CalculatorController controller;
	private JFrame frame;
	private JPanel panel;
	private JTextField textField;
	private JButton[] numberButtons;
	private JButton[] signButtons;
	public CalculatorView(CalculatorController controller) {
		this.controller = controller;
		this.init();
	}
	private void init() {
		frame = new JFrame("Calculator");
		frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		frame.setBounds(100, 100, 0, 0);
		frame.setResizable(false);
		panel = new JPanel(new GridBagLayout());
		frame.add(panel);
		// arithmetic field
		textField = new JTextField();
		GridBagConstraints gbc_textField = new GridBagConstraints();
		gbc_textField.fill = GridBagConstraints.HORIZONTAL;
		gbc_textField.gridwidth = 5;
		panel.add(textField, gbc_textField);
		// buttons for numbers
		numberButtons = new JButton[10];
		for (int i = 0; i < numberButtons.length; i++) {
			numberButtons[i] = new JButton("" + i);
			numberButtons[i].addActionListener(this);
			GridBagConstraints gbc = new GridBagConstraints();
			if (i < 5) {
				gbc.gridx = i;
				gbc.gridy = 1;
			} else {
				gbc.gridx = i - 5;
				gbc.gridy = 2;
			}
			panel.add(numberButtons[i], gbc);
		}
		// buttons for signs
		signButtons = new JButton[5];
		signButtons[0] = new JButton("+");
		signButtons[1] = new JButton("-");
		signButtons[2] = new JButton("*");
		signButtons[3] = new JButton("/");
		signButtons[4] = new JButton("=");
		for (int i = 0; i < signButtons.length; i++) {
			signButtons[i].addActionListener(this);
			GridBagConstraints gbc = new GridBagConstraints();
			gbc.gridx = i;
			gbc.gridy = 3;
			gbc.fill = GridBagConstraints.HORIZONTAL;
			panel.add(signButtons[i], gbc);
		}
		frame.pack();
		frame.setVisible(true);
	}
	@Override
	public void actionPerformed(ActionEvent arg0) {
		String text = ((JButton) arg0.getSource()).getText();
		if (text.equals("=")) {
			controller.calculateResult(textField.getText());
		} else {
			if (text.equals("+") || text.equals("-") || text.equals("*")
					|| text.equals("/")) {
				textField.setText(textField.getText() + " " + text + " ");
			} else {
				textField.setText(textField.getText() + text);
			}
		}
	}
	@Override
	public void newResult(CalculatorEvent event) {
		String message = "The result is " + event.getResult();
		String title = "Result!";
		JOptionPane.showMessageDialog(new JFrame(), message, title,
				JOptionPane.PLAIN_MESSAGE);
		textField.setText("");
	}
}Controller
		Java:
	
	package calculator.controller;
import java.awt.EventQueue;
import calculator.model.CalculatorModel;
import calculator.view.CalculatorView;
public class CalculatorController {
	private CalculatorModel model;
	public static void main(String[] args) {
		EventQueue.invokeLater(new Runnable() {
			@Override
			public void run() {
				new CalculatorController();
			}
		});
	}
	private CalculatorController() {
		CalculatorView view = new CalculatorView(this);
		model = new CalculatorModel();
		model.addCalculatorObserver(view);
	}
	public void calculateResult(String string) {
		String[] strings = string.trim().split(" ");
		int nmb1 = Integer.parseInt(strings[0]);
		int nmb2 = Integer.parseInt(strings[2]);
		switch (strings[1].charAt(0)) {
		case '+':
			model.addition(nmb1, nmb2);
			break;
		case '-':
			model.subtraction(nmb1, nmb2);
			break;
		case '*':
			model.multiplication(nmb1, nmb2);
			break;
		case '/':
			model.division(nmb1, nmb2);
			break;
		default:
			break;
		}
	}
}Gruß
			
				Zuletzt bearbeitet: 
			
		
	
								
								
									
	
								
							
							 
				 
 
		 
 
		 
 
		 
 
		 
 
		