Вы находитесь на странице: 1из 53

Course of Software Engineering II

Design Patterns:
Elements of Reusable Object Oriented Software

Serena Fabbri 1
Design Patterns

Design Pattern

Introduction: why a design pattern? History of design pattern What is a design pattern How we describe design pattern Classification of desing pattern Examples of design pattern Conclusions Bibliography

Design Patterns

Why a Design Pattern

Reusability:one of Wassermans rules(1996)for an efficient and actual SE discipline Helping new designers to have a more flexible and reusable design Improving the documentation and maintenance of existing system by furnishing an explicit specification of class and object interactions and their intent

Design Patterns

History of Design Pattern

1979:Christopher Alexander,architect, The Timeless Way of Building,Oxford Press 1987:OOPSLA (Object Oriented Programming System),Orlando, presentation of design pattern to the community OO by Ward Cunningham and Kent Beck 1995:Group of Four alias E.Gamma, R.Helm,R.Johnson and J.Vlissides : Design Pattern:Elements of Reusable OO software

Design Patterns

What Is a Design Pattern

A design pattern is a descriptions of communicating objects and classes that are customized to solve a general design problem in a particular context

A pattern is made by four elements: name problem solution consequences

Design Patterns

Name of Design Pattern

Describe a design problems and its solutions in a word or two Used to talk about design pattern with our colleagues Used in the documentation Increase our design vocabulary Have to be coherent and evocative

Design Patterns

Problem

Describes when to apply the patterns Explains the problem and its context Sometimes include a list of conditions that must be met before it makes sense to apply the pattern Have to occurs over and over again in our environment

Design Patterns

Solution

Describes the elements that make up the design, their relationships, responsibilities and collaborations
Does not describe implementation a concrete design or

Has to be well proven in some projects

Design Patterns

Consequences

Results and trade-offs of applying the pattern


Helpful for describe design decisions, for evaluating design alternatives Benefits of applying a pattern Impacts on a systems flexibility,extensibility or portability

Design Patterns

Description of Design Pattern

Pattern name and classification


contains the essence of pattern succinctly Become part of your design vocabulary

Intent

What does the pattern do ? What particular problem does it address ?

Design Patterns

10

Description of Design Pattern

Motivation

Illustrate a design problem and how the class and the object structures solve the problem

Applicability

In which situations the pattern can be applied? How can you recognize these situations?

Design Patterns

11

Description of Design Pattern

Structure

Graphical representation of the classes their collaborations in the pattern

and

Participants

Class Objects Responsibilities

Design Patterns

12

Description of Design Pattern

Collaborations

How the participants collaborate to carry out their responsibilities

Consequences

How does the pattern support its objectives? What are the trade-offs and results of using the pattern?

Design Patterns

13

Description of Design Pattern

Implementation
Sample Code Known Uses

Examples of the pattern found in real systems

Design Patterns

14

Description of Design Pattern


Related Patterns

What design patterns are closely related to this one? What are the important differences?

Design Patterns

15

Classification of Design Pattern


By purpose and by scope

Creational patterns

Abstract the instantiation process Make a system independent to its realization Class Creational use inheritance to vary the instantiated classes Object Creational delegate instantiation to an another object

Design Patterns

16

Classification of Design Pattern

Structural patterns

Class Structural patterns concern the aggregation of classes to form largest structures

Object Structural pattern concern the aggregation of objects to form largest structures

Design Patterns

17

Classification of Design Pattern

Behavioral patterns

Concern with algorithms and assignment of responsibilities between objects Describe the patterns of communication between classes or objects Behavioral class pattern use inheritance to distribute behavior between classes Behavioral object pattern use object composition to distribute behavior between classes

Design Patterns

18

Classification of design patterns ( a view)


purpose
Scope Class
Creational Factory Method Structural Adapter Behavioral Interpreter Template Method

Object

Abstract Factory

Adapter

Chain of Responsibility Command Iterator Mediator Memento Observer State Strategy Visitor

Builder Prototype Singleton

Bridge Composite Decorator Faade Flyweight Proxy

Design Patterns

19

Creational Pattern

Singleton

Ensure a class only has one instance Provide a global point of access to it

Abstract Factory:

Provide an interface for creating families of related or dependent objects without specifying their concrete classes

Design Patterns

20

Creational Pattern

Factory Method:

Define an interface for creating an object but let subclasses decide which class to instantiate Lets a class defer instantiation to subclasses

Prototype

Specify the kinds of objects to create using a prototypical instance Create new objects by copying this prototype

Design Patterns

21

Creational Pattern

Builder:

Separate the construction of a complex object from its representation so that the same construction process can create different representations

Design Patterns

22

Structural Pattern

Composite

Compose objects into tree structures to represent part-whole hierarchies Lets clients treat individual objects and compositions of objects uniformly

Decorator

Attach additional responsibilities to an object dynamically Provide a flexible alternative to subclassing for extending functionality

Design Patterns

23

Structural Pattern

Adapter:

Convert the interface of a class into another interface clients expect Lets classes work together that couldnt otherwise because of incompatible interfaces

Bridge:

Decouple an abstraction from its implementation so that the two can vary independently

Design Patterns

24

Structural Pattern

Faade

Provide a unified interface to a set of interfaces in a subsystem Defines an higher-level interface that makes the system easier to use

Flyweight

Use sharing to support large numbers of finegrained objects efficiently

Design Patterns

25

Structural Pattern

Proxy

Provide a surrogate or placeholder for another object to control access to it

Design Patterns

26

Behavioral Pattern

Iterator

Provide a way to access the elements of an aggregate object without exposing its representation

Command

Encapsulate a request as an object, thereby letting you parameterize clients with different requests

Design Patterns

27

Behavioral Pattern

Interpreter

Given a language, define a representation for its grammar along with an interpreter that uses the representation to interpret sentences in the language

Mediator

Define an object that encapsulate how a set of objects interact Promotes loose coupling by keeping objects from referring to each other explicitly Lets you vary their interaction independently

Design Patterns

28

Behavioral Pattern

Memento

Capture and externalize state

an objects internal

Observer

Define a one-to-many dependency between objects so when one of them change state all its dependents are updated automatically

Design Patterns

29

Behavioral Pattern

State

Allow an object to alter its behavior when its internal state changes The object will appear to change its class

Visitor

Represent an operation to be performed on the elements of an object structure Lets you define a new operation without changing the classes of the elements on which operates

Design Patterns

30

Behavioral Pattern

Strategy

Define a family of algorithms Encapsulate each one Make them interchangeable Lets the algorithms vary independently from clients that use it Avoid coupling the sender of a request to its receiver by giving more then one object a chance to handle the request Chain the receiving objects and pass the request along the chain until an object handles it

Chain of responsibilities

Design Patterns

31

Singleton Pattern

Motivation

we need to have exactly only one instance for a class (ex. Printer spooler) Make the class itself responsible for keeping track of its sole instance The class provide a way to access the instance

Applicability

There must be only one instance of a class accessible from a well-known point

Design Patterns

32

Singleton Pattern

Structure

Singleton
Static Instance()

SingletonOperation() GetSingletonData()
Static uniqueInstance SingletonData

Return uniqueInstance

Design Patterns

33

Singleton Pattern

Participants

Singleton class Access only through Singletons instance operation Controlled access to sole instance Permits refinement of operation and representation More flexible than class operations

Collaborations

Consequences

Design Patterns

34

Example of Singleton use


Lotteria Algebrica We had to have only one instance for class Director. We simply solve our problem using Singleton Pattern
Director Static Instance() Given(n_ticket:int):void Error():void

Static UniqueInstance

Design Patterns

35

Decorator Pattern

Motivation

Add responsibilities to individual object not to an entire class conforming the interface of the component decorated

Design Patterns

36

Decorator Pattern

Structure
Component Operation()

ConcreteComponent Operation()

Decorator Operation()

ConcreteDecoratorA Operation() AddedState


Design Patterns

ConcreteDecoratorB Operation() Addedbehavior

37

Decorator Pattern

Participants

Component Define the interface for objects that can have responsibilities added to them dinamically Concrete Component Defines an object to which additional responsibilities can be attached Decorator Mantains a reference to a Component object and defines an interface that conforms to Components interface ConcreteDecorator Added responsibilities to the component

Design Patterns

38

Decorator Pattern

Consequences

More flexibility than static inheritance Avoids feature-laden classes high up in the hierarchy A decorator and its component are not identical Lots of little objects

Design Patterns

39

Example of Decorator

Motivation If you have a TextView object that displays text in a Window TextView has no scroll bars by default TextView has no bord by default

Design Patterns

40

Example of Decorator

Structure

aBorderDecorator component aScrollDecorator component

aTextView

Design Patterns

41

Example of Decorator

Structure
VisualComponent
Draw()

TextView

Decorator

Draw()

Draw()

ScrollDecorator Draw() ScrollTo() ScrollPosition


Design Patterns

BorderDecorator Draw() DrawBorder() BorderWidth

42

Iterator Pattern

Also know as

Cursor Provide more way to access to the elements of an aggregate

Motivation

ListIterator

List
Count() Append(Element) Remove(Element)

First() Next() IsDone() CurrentItem Index

Design Patterns

43

Iterator Pattern

Applicability

Access an aggregate objects contents Support multiple traversals of aggregate objects Provide an uniform interface

Design Patterns

44

Iterator Pattern

Structure
Aggregate Client

Iterator

CreateIterator()

First() Next() IsDone() CurrentItem()

ConcreteAggregate CreateIterator() Return new ConcreteIterator(This)


Design Patterns

ConcreteIterator

45

Iterator Pattern

Participants

Iterator Defines interfaces for accessing elements ConcreteIterator Implements the Iterator interface Keeps track of the current position in the traversal of the aggregate Aggregate Defines an interface for creating an Iterator object Concrete Aggregate Implements the Iterator creation interface Return an instance of ConcreteIterator
Design Patterns

46

Iterator Pattern

Consequences

Simplify the Aggregate interface More that one traversal can be pending on an aggregate Variations in the traversal of an aggregate

Design Patterns

47

Patterns and Frameworks


Design patterns Design patterns than frameworks Design patterns frameworks Framework is executable software, design pattern represent knowledge about software Frameworks are the physical realization of one or more software pattern solutions,pattern are instructions for how to implement those solutions

Set of cooperating classes that make up reusable design for abstract a specific class of software. Provides are more than frameworks architectural guidance by partitioning the design into are smaller architectural elements abstract classes and defining their responsibilities and collaborations. A developer customizes a framework are less specialized than to a particular application by subclassing and composing instances of framework classes.

Design Patterns

48

Conclusions

At present, the software community is using pattern largely for software architecture and design More recently the software community is using pattern also for software development processes and o organizations Several object-oriented software design notations/methods have added support for the modeling and representation of design patterns

Design Patterns

49

Night Patterns
The coffee mug etched black inside Haunts the worn gray keys. The computer screen amused pearlwhite lights the developers hands And his night still life: pencils and books, scattered page of code circled and crossed with notes. Outside, along the river, white headlights flow, Red lights retreat.

Design Patterns

50

Night Patterns
Inside the agile black box it waits- the Conjuring That lifts alive vined parts, Veins flowing in forces he imagines By circles and crosses, in dozing spells, In whitened warmth upon noon earth, In peach trees by the wallIt waits to pulse the pages Toward life,the patterns of night, to bring The quality,singing soft and hangign low. RICHARD GABRIEL

Design Patterns

51

Bibliography
For the pattern catalogue:

Erich Gamma, Richard Helm,Ralph Johnson,John Vlissides. Design Patterns:

Elements of Reusable Object-Oriented Software. ADDISON-WESLEY 1995 For the pattern origin: Cristopher Alexander. The Timeless Way of Building. Oxford Press 1979 For Night Patterns: James O.Coplien,Douglas C.Schmidt.Pattern Languages of Program Design. ADDISONWESLEY 1995

Design Patterns

52

More Information
Here you can find some example in Italian of design patterns.

http://www.ugolandini.net/PatternsHome.ht ml

Here you can find some general information about patterns

http://www.mokabyte.it/1998/10/pattern.ht m http://www.c2.com
http://www.enteract.com/~bradapp/docs/pat terns-intro.html
Design Patterns

A complete Web site about pattern

53