Design patterns slides

advertisement
Design Patterns
Ric Holt & Sarah Nadi
U Waterloo, March 2010
What is a Design Pattern
• A Design Pattern systematically names,
explains, and implements an important
recurring design.
• These define well-engineered design
solutions that practitioners can apply when
crafting their applications.
2
Why Design Patterns?
• Good designers do not solve every problem
from first principles. They reuse solutions.
• Practitioners do not do a good job of
recording experience in software design for
others to use. Patterns help solve this
problem.
3
Four Example Patterns
1.
2.
3.
4.
MVC (Model View Controller)
Adapter
Facade
Factory
4
1. MVC Pattern
(Model View Controller)
• There is a model (subject) which can be
thought of as the application
• There are one or more views of the object
(by observers)
• There is a controller that mediates between
the model and the view(s).
5
Example MVC
Views
a = 50%
b = 30%
c = 20%
a
b
c
a
b
c
Controller
a b c
Model
503020
[Mancoridis picture]
6
Example MVC
Views
a = 50%
b = 30%
c = 20%
a
b
c
a
b
c
Controller
See
a b c
Model
Interact
503020
[Mancoridis picture]
7
Multiple View Problem
• Need to keep all the views consistent
• If user (or one of users) changes a view, all
other views should be updated
8
Information Hiding:
Insulating Model from Presentation
• The model is the “back end” or “business
logic”, or “application”
• To minimize complexity, the model should
know as little as possible about
– How users interact with system
– How many users are there
– Any other models
9
Implementing MVC
• There are many choices
–
–
–
–
Where is list of views (observers) kept?
How is notification of change transmitted?
How manage web interface?
Should a view ask for (or should it be told of)
details about changes?
10
What Kind of Pattern is MVC?
• Design pattern proper?
– Use it for structuring modest configurations
• Architectural pattern?
– Use it for overall structure of a software
system, defining interactions among services,
browsers etc.
11
2. Adapter Pattern
• You have an existing client (application)
that uses an old interface to an existing
support package.
• You are given a new interface to a new
support package
• You need to produce an adapter so that:
– The client can use the new interface instead of
the old one (without changing the client)
12
Illustration of Adapter Pattern
Old
interface
Old
package
Client
Old
interface
Client
Adapter
New
interface
New
package
13
Implementing Adapter Pattern Using
Object Composition
Client
Old Interface
New Interface
Request()
SpecificRequest()
inherit
Adapter
Request()
adaptee
SpecificRequest()
14
Advantages of Adapter Pattern
• Can change behavior of existing software
without changing its source code
• Can be used for legacy software
• Do not need access to old source code
15
3. Facade Pattern
• A facade provides a single simplified
interface to a larger part of the system (a
subsystem)
• The facade makes this subsystem more
readable and easier to understand
• Having facades minimizes communication
and dependencies between subsystems
16
Structure of the Facade Pattern
Facade
Subsystem
Classes
[Mancoridis picture]
17
Adapter vs. Facade
• An Adapter is used when the wrapper must
respect a particular interface and must
support a polymorphic behavior. On the
other hand, a facade is used when one wants
an easier or simpler interface to work with
18
4. Factory Pattern
• A creational pattern dealing with creating
objects without knowing their concrete class
• It defines an interface for creating an object,
but let the subclasses decide which class to
instantiate
• Useful when concrete class of object should
be decided at runtime according to
parameters
19
How does it work
<static>
<abstract>
Product
ProductFactory
createProduct(in param) : Product
inherits
<Implementation Class>
ProductA
<Implementation Class>
ProductB
Produces different subclasses
of Product according to
parameters
20
Download