Transcript OOP Design Patterns - UNI Department of Computer Science
OOP Design Patterns
Chapters 13-16
Design Patterns
• The main idea behind design patterns is to extract the high level interactions between objects and reuse their behaviors from application to application. • They were inspired by an architect, Christopher Alexander, discussing the way that architectural design has patterns of its own: – Each pattern describes a problem which occurs over and over again in our environment, and then describes the core of the solution to that problem, in such a way that you can use this solution a million times over, without ever doing it the same way twice.
A Timeless Way of Building
MVC Design Patterns
• Model-View-Controller (MVC) • A collection of simpler patterns that are incredibly useful. • Using MVC, you think of the application in terms of these three modules –
Model :
The core of the application. This maintains the state and data that the application represents. When significant changes occur in the
model
, it notifies all of its
views
–
Controller :
The user interface presented to the user to manipulate the application. –
View : model
The user interface which displays information about the
model
to the user. Any object that needs information about the needs to be a registered
view
with the
model
.
MVC Advantages
• MVC decouples the model, view, and controller from each other to increase flexibility and reuse.
– You can attach multiple views to the model without rewriting it.
– You can change the way a view responds to user input without changing the visual presentation. For example, you might use a pop-up menu instead of keyboard command keys.
MVC Design Patterns
• MVC decouples views and model by establishing a subscribe/notify protocol which is an example of the Observer design pattern.
Observer
–
Problem:
How do you allow two or more independent and loosely coupled objects to change in synchrony with each other?
–
Solution:
Maintain a list of objects that are tied, or dependent, on another object. When the target object changes, the dependents, or observers, are notified that they should update themselves.
•
Observer Design Pattern
Examples:
– User interface components that permit interaction (buttons, scrollbar, etc.) maintain a collection of listener objects.
– We can dynamically add or remove listener objects as long as they satisfy an interface.
– When the state of the GUI component changes, each of the listeners is notified of a change.
Observer Design Pattern
• The class library Observable represents objects that can be “observed”.
– the equivalent of the GUI component in AWT – What would be observed in the MVC architecture?
• Objects wishing to be observed can either – subclass Observable , or – have an Observable instance variable • Other objects can implement the Observer interface which correspond to the listeners • An Observer registers itself with the object being observed.
• The Observable object invokes notifyObservers() at any time to indicate that it has changed state.
• notifyObservers() causes each observer to be sent a message update(Observable, Object), where – first argument is the observable that changed – second argument is optional, but usually provides
Observer Design Pattern
• Look at code for HeartBeat example
MVC Design Patterns
• MVC also lets you change the way a view responds to user input without changing its visual presentation – A view uses an instance of a Controller subclass to implement a particular response strategy – To implement a different strategy, simply replace the instance with a different kind of controller • e.g., a view can be “disabled” so that it does not accept input simply by giving it a controller that ignores input events – The view-controller relationship is an example of the Strategy design pattern.
•
Strategy Design Pattern
Problem:
How do you allow the algorithm that is used to solve a particular problem to be easily and dynamically changed by the client?
•
Solution:
Define a family of algorithms with a similar interface. Each algorithm provides a different strategy for solving the problem at hand. Encapsulate each algorithm, and let the client select the strategy to be used in any situation.
Strategy Design Pattern
•
Example:
the creation of layout managers in the AWT – rather that coding in the component library (e.g., frame, panel, etc.) the details of how items are laid out on the screen, these decisions are left to the layout manager.
– an interface for LayoutManager is defined – the activities of the GUI components (e.g., frame, panel, etc.) are independent of the layout manager being used.
holds
Container LayoutManager
inherits
Application
implements
GridLayout
MVC Design Patterns
• MVC – views can be nested • Nested views is supported with the CompositeView class which is a subclass of the View class • CompositeView objects act just like View objects, except they also contain and manage nested views.