OOP Design Patterns - UNI Department of Computer Science

Download Report

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.