Lösungsvorschläge zum Übungsblatt 12: Fortgeschrittene Aspekte

Werbung
Prof. Dr. A. Poetzsch-Heffter
Dipl.-Inform. N. Rauch
Technische Universität Kaiserslautern
Fachbereich Informatik
AG Softwaretechnik
Lösungsvorschläge zum Übungsblatt 12: Fortgeschrittene Aspekte
objektorientierter Programmierung (SS 2007)
Aufgabe 1 Das Model-View-Controller Pattern
a) Eine MVC-basierte Version könnte wie folgt aussehen.
import java.awt.event.*;
import javax.swing.*;
import java.util.*;
public class MyApplicationMVC
{
public MyApplicationMVC() {
MyModel
m=new MyModel();
MyController c=new MyController(m);
new MyView(c,m);
new MyView(c,m);
new MyView2(c,m);
}
public static void main(String ... args) {
new MyApplicationMVC();
}
}
class MyModel extends Observable {
private int myValue=-1;
@Override public void addObserver(Observer observer) {
super.addObserver(observer);
increment();
}
public int getValue() {
return(myValue);
}
public void increment() {
setChanged();
notifyObservers(++myValue);
}
}
class MyView extends JFrame implements Observer {
private JButton button;
public MyView(MyController target, MyModel observable) {
button = new JButton();
this.add(button);
button.addActionListener(target);
observable.addObserver(this);
setVisible(true);
}
public void update(Observable o, Object arg) {
button.setText(arg.toString());
}
}
class MyView2 extends JFrame implements Observer {
private JLabel label;
public MyView2(MyController target, MyModel observable) {
label = new JLabel();
this.add(label);
observable.addObserver(this);
setVisible(true);
}
public void update(Observable o, Object arg) {
label.setText(arg.toString());
}
}
class MyController implements ActionListener {
private MyModel myModel;
public MyController(MyModel myModel) {
this.myModel=myModel;
}
public void actionPerformed(ActionEvent Event) {
myModel.increment();
}
}
b) Die ursprüngliche Version besitzt keine Nutzungsschnittstelle; die Nutzungsschnittstelle der MVC-basierten Applikation ist die Schnittstelle der MVC-Klassen.
c) Eine Erweiterung der ursprünglichen Applikation könnte so aussehen:
import java.awt.event.*;
import javax.swing.*;
public class MyApplication2 extends JFrame implements ActionListener
{
private JButton myButton=new JButton("0");
private JFrame myFrame = new JFrame();
private JLabel myLabel = new JLabel();
public MyApplication2() {
add(myButton);
myButton.addActionListener(this);
myFrame.add(myLabel);
setVisible(true);
myFrame.setVisible(true);
}
public void actionPerformed(ActionEvent Event) {
String label = Integer.toString(Integer.parseInt(myButton.getText())+1);
myButton.setText(label);
myLabel.setText(label);
}
public static void main(String ... args) {
new MyApplication2();
}
}
Es ist deutlich zu sehen, dass eine solche Erweiterung mit dem MVC-Pattern wesentlich klarer und strukturierter
vonstatten geht. Auch wenn weitere View-Instanzen zugefügt werden sollen, ist dies im MVC-Pattern leichter
möglich.
2
Herunterladen