![Page 1: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/1.jpg)
Model View Controller Pattern
• Patterns
• Model-View-Controller
![Page 2: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/2.jpg)
A Single Class
T result = I;T nextValue = getNextValue()while (!isSentinel(nextValue)) { result = f(result, nextValue); nextValue = getNextValue(..);}
Folding Intra-Class PatternLoan, int new ALoan(0), 1
ALoan.add(), *
>= 0
![Page 3: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/3.jpg)
Scanning Inter-Class Pattern
Scanner Instance
Enumeration Interface
Scanner User
public interface <Type>Enumeration { public <Type> nextElement(); public boolean hasMoreElements();
}
![Page 4: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/4.jpg)
Architectural Pattern
• Christopher 79– Each pattern is a three part rule, which
expresses a relation between a certain context, a problem, and a solution.
– Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of a solution to that problem, in such a way that you can use this solution a million times over
![Page 5: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/5.jpg)
Book on Design Patterns
![Page 6: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/6.jpg)
MVC Pattern
Model:APointHistoryModel
instance
Controller:AConsoleControllerinstance
Controller:AnAWTControllerinstance
Controller:AnAWTControllerinstance
Controller:ASwingControllerinstance
View:AConsoleViewinstance
View:ABarChartViewinstance
View:APlotterViewinstance
View:Aplotterviewinstance
![Page 7: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/7.jpg)
Displaying Points
![Page 8: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/8.jpg)
Displaying Points
Swing button
AWT button
Swing Detachable Toolbar
![Page 9: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/9.jpg)
Displaying Points
All four views displayed concurrently and kept in Sync.
![Page 10: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/10.jpg)
ObjectEditor-based Structure
APointHistory ObjectEditor
![Page 11: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/11.jpg)
Reusing Point History
APointHistoryUser Interface Code:
Single Main Class
![Page 12: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/12.jpg)
More Modular ApproachEditor:AConsoleEditor
Editor:ASwingPlotterEditor
Editor:ABarChartEditor
Editor:AnAWTPlotterEditor
Composer:Single Main
ClassAPointHistory
![Page 13: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/13.jpg)
Sharing the View
![Page 14: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/14.jpg)
Sharing the Controller
![Page 15: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/15.jpg)
Controller Without View
![Page 16: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/16.jpg)
View Without Controller
![Page 17: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/17.jpg)
Monolithic Editor
AWT Plotter Editor
APointHistory
![Page 18: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/18.jpg)
Separate View and Controller
Controller:AnAWTController
View:ABarchartView
APointHistory
addElement( ) size( )elementAt( )
Performs Input Performs Output
Write methods
Read methods
![Page 19: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/19.jpg)
Multiple Views and Controllers
APointHistory
Controller:AConsoleController
Controller:AnAWTController
Controller:AnAWTController
Controller:ASwingController
View:AConsoleView
View:ABarChartView
View:APlotterView
View:APlotterView
Syncing Controllers and Views?
![Page 20: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/20.jpg)
Model View Controller Framework
Model:APointHistoryModel
Controller:AConsoleController
Controller:AnAWTController
Controller:AnAWTController
Controller:ASwingController
View:AConsoleView
View:ABarChartView
View:APlotterView
View:APlotterView
Changed object notifies views
ListenableListeners
![Page 21: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/21.jpg)
Model View Controller Framework
Model:APointHistoryModel
Controller:AConsoleController
Controller:AnAWTController
Controller:AnAWTController
Controller:ASwingController
View:AConsoleView
View:ABarChartView
View:APlotterView
View:APlotterView
Composer:Single Main
Class
Composer connects models, views, controllers
![Page 22: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/22.jpg)
Class Vs Instance
Model:APointHistoryModel
Controller:AConsoleController
Controller:AnAWTController
Controller:AnAWTController
Controller:ASwingController
View:AConsoleView
View:ABarChartView
View:APlotterView
View:APlotterView
Composer:Single Main
Class
Different State
![Page 23: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/23.jpg)
MVC Framework
Model:APointHistoryModel
Instance
Controller:AConsoleControllerinstance
Controller:AnAWTControllerinstance
Controller:AnAWTControllerinstance
Controller:ASwingControllerinstance
View:AConsoleViewinstance
View:ABarChartViewinstance
View:APlotterViewinstance
View:APlotterViewinstance
Composer:Single Main
Class
![Page 24: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/24.jpg)
Model
Model:APointHistoryModel
Instance
Controller:AConsoleControllerinstance
Controller:AnAWTControllerinstance
Controller:AnAWTControllerinstance
Controller:ASwingControllerinstance
View:AConsoleViewinstance
View:ABarChartViewinstance
View:APlotterViewinstance
View:APlotterViewinstance
Composer:Single Main
Class
![Page 25: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/25.jpg)
Model Vs PointHistory
APointHistory Instance
Controller:AConsoleControllerinstance
Controller:AnAWTControllerinstance
Controller:AnAWTControllerinstance
Controller:ASwingControllerinstance
View:AConsoleViewinstance
View:ABarChartViewinstance
View:APlotterViewinstance
View:APlotterViewinstance
Composer:Single Main
Class
![Page 26: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/26.jpg)
Reusing PointHistory
PointHistory APointHistoryIMPLEMENTS
APointHistoryModel
EXTENDS
PointModel
EXTENDS
IMPLEMENTS
![Page 27: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/27.jpg)
Notification Scheme
Model:APointHistoryModel
Instance
View:AConsoleViewinstance
View:ABarChartViewinstance
View:APlotterViewinstance
View:APlotterViewinstance
• Each view is registered with model.
• Each write method in model calls a notification method in each view.
•Notification method updates display.
Model:PointModel
Instance (Animating Point)
• Each student is registered with professor’s listserv.
• When web page is updated mail sent to students.
•Student reads web page.
![Page 28: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/28.jpg)
View with Multiple Models
APointHistoryModel InstancePointModel
Instance
![Page 29: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/29.jpg)
General Notification Scheme
Model:APointHistoryModel
Instance
View:AConsoleViewinstance
View:ABarChartViewinstance
View:APlotterViewinstance
View:APlotterViewinstance
•View may have multiple models with common notification method.
•Notification method parameter indicates which model.
Model:PointModel
Instance (Animating Point)
![Page 30: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/30.jpg)
PointHistoryModel & PointHistoryListener
public interface PointHistoryModel extends PointHistory {public void addListener (PointHistoryListener pointHistoryListener);public void removeListener (PointHistoryListener pointHistoryListener);
}
public interface PointHistoryListener {public void pointHistoryUpdated(PointHistory pointHistory);
}
Called whenever model is updatedUpdated object (model)
View (console, barchart, plotter ..)
Common interface of all views
![Page 31: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/31.jpg)
APointHistoryModelimport java.util.Vector;import java.util.Enumeration;public class APointHistoryModel extends APointHistory implements PointHistoryModel {
public void addElement (int x, int y) {super.addElement(x, y);notifyListeners();
}Vector listeners = new Vector();public void addListener (PointHistoryListener pointHistoryListener) {
listeners.addElement(pointHistoryListener);}public void removeListener (PointHistoryListener pointHistoryListener) {
listeners.removeElement(pointHistoryListener);}void notifyListeners() {
Enumeration elements = listeners.elements();while (elements.hasMoreElements())
((PointHistoryListener) elements.nextElement()).pointHistoryUpdated(this);
}}
Object evaluating expression (Object on which enclosing method executed)
Each write method notifies.
![Page 32: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/32.jpg)
Console Viewimport shapes.PointModel;public class APointHistoryConsoleView implements PointHistoryListener {
public void pointHistoryUpdated(PointHistory pointHistory) {System.out.println ("**********");for (int i = 0; i < pointHistory.size(); i++) {
PointModel nextPoint = (PointModel) pointHistory.elementAt(i);
System.out.println("(" + nextPoint.getX() + "," + nextPoint.getY() + ")");
}System.out.println ("**********");
}}
![Page 33: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/33.jpg)
Displaying Points
View updated whenever any controller changes model
![Page 34: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/34.jpg)
Console Controller
public class APointHistoryConsoleController implements PointHistoryConsoleController {
PointHistory pointHistory ;public APointHistoryConsoleController (PointHistory thePointHistory) {
pointHistory = thePointHistory;}public void processCommands() {
while (true){System.out.println("Please enter new point:");String input = Keyboard.readString();if (input.equals("quit")) break;int x = Integer.parseInt(input);int y = Keyboard.readInt();pointHistory.addElement (x,y);
}}
}
Output method not called directly
![Page 35: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/35.jpg)
Console Composerpublic class APointHistoryConsoleComposer { public static void main (String args[]) {
PointHistoryModel pointHistoryModel = new APointHistoryModel();createConsoleEditor(pointHistoryModel);
} public static void createConsoleEditor(PointHistoryModel pointHistoryModel) {
createConsoleView(pointHistoryModel);createConsoleController(pointHistoryModel).processCommands();
} public static PointHistoryListener createConsoleView(PointHistoryModel pointHistoryModel) {
PointHistoryListener pointHistoryView = new APointHistoryConsoleView (); pointHistoryModel.addListener(pointHistoryView); return pointHistoryView; } public static PointHistoryConsoleController createConsoleController(PointHistory pointHistory) {
return new APointHistoryConsoleController(pointHistory); }}
![Page 36: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/36.jpg)
PointHistoryModel & PointHistoryListener
public interface PointHistoryModel extends PointHistory {public void addListener (PointHistoryListener pointHistoryListener);public void removeListener (PointHistoryListener pointHistoryListener);
}
public interface PointHistoryListener {public void pointHistoryUpdated(PointHistory pointHistory);
}
![Page 37: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/37.jpg)
Using a More Specific Type
public interface PointHistoryModel extends PointHistory {public void addListener (PointHistoryListener pointHistoryListener);public void removeListener (PointHistoryListener pointHistoryListener);
}
public interface PointHistoryListener {public void pointHistoryUpdated(PointHistoryModel pointHistoryModel);
}
specific type
Allows less polymorphism
pointHistoryUpdated does not call addListener or removeListener
![Page 38: Model View Controller Pattern Patterns Model-View-Controller](https://reader033.vdocument.in/reader033/viewer/2022050809/56649d695503460f94a47729/html5/thumbnails/38.jpg)
Using Most General Type Possible
public interface PointHistoryModel extends PointHistory {public void addListener (PointHistoryListener pointHistoryListener);public void removeListener (PointHistoryListener pointHistoryListener);
}
public interface PointHistoryListener {public void pointHistoryUpdated(PointHistory pointHistory);
}
More general type
Allows more polymorphism
pointHistoryUpdated does not call addListener or removeListener
PointHistoryModel can be assigned