Last Lecture. Lecture 17: Design Patterns (part 2) Kenneth M. Anderson Object-Oriented Analysis and Design CSCI 4448/ Spring Semester, 2005

Similar documents
Last Lecture. Lecture 26: Design Patterns (part 2) State. Goals of Lecture. Design Patterns

Design Patterns. Manuel Mastrofini. Systems Engineering and Web Services. University of Rome Tor Vergata June 2011

Goals of Lecture. Lecture 27: OO Design Patterns. Pattern Resources. Design Patterns. Cover OO Design Patterns. Pattern Languages of Programming

Modellistica Medica. Maria Grazia Pia, INFN Genova. Scuola di Specializzazione in Fisica Sanitaria Genova Anno Accademico

Think of drawing/diagramming editors. ECE450 Software Engineering II. The problem. The Composite pattern

Object-Oriented Oriented Programming

State Pattern. CSIE Department, NTUT Woei-Kae Chen. State: Intent. Allow an object to alter its behavior when its internal state changes.

SDC Design patterns GoF

COSC 3351 Software Design. Design Patterns Structural Patterns (I)

THOMAS LATOZA SWE 621 FALL 2018 DESIGN PATTERNS

Design Pattern: Composite

EMBEDDED SYSTEMS PROGRAMMING Design Patterns

Design Patterns. Software Engineering. Sergio Feo-Arenis slides by: Matthias Keil

COSC 3351 Software Design. Design Patterns Structural Patterns (II) Edgar Gabriel. Spring Decorator

EMBEDDED SYSTEMS PROGRAMMING Design Patterns

Design Patterns. Softwaretechnik. Matthias Keil. Albert-Ludwigs-Universität Freiburg

Slide 1. Design Patterns. Prof. Mirco Tribastone, Ph.D

Dr. Xiaolin Hu. Review of last class

» Access elements of a container sequentially without exposing the underlying representation

Topics in Object-Oriented Design Patterns

Software Eningeering. Lecture 9 Design Patterns 2

CSCI 253. Overview. The Elements of a Design Pattern. George Blankenship 1. Object Oriented Design: Iterator Pattern George Blankenship

Design Patterns Lecture 2

Design of Software Systems (Ontwerp van SoftwareSystemen) Design Patterns Reference. Roel Wuyts

Object-Oriented Oriented Programming

CS 2720 Practical Software Development University of Lethbridge. Design Patterns

Information systems modelling UML and service description languages

Design Patterns Reid Holmes

The Composite Design Pattern

Design Patterns. Comp2110 Software Design. Department of Computer Science Australian National University. Second Semester

Design Patterns 2. Page 1. Software Requirements and Design CITS 4401 Lecture 10. Proxy Pattern: Motivation. Proxy Pattern.

Composite Pattern. IV.4 Structural Pattern

Design Patterns IV Structural Design Patterns, 1

Appendix-A. A.1 Catalogues of Design Patterns. Below is the definition for each design pattern using the FINDER notation, followed

COSC 3351 Software Design. Design Patterns Behavioral Patterns (I)

MORE DESIGN PATTERNS CSCI 4448/5448: OBJECT-ORIENTED ANALYSIS & DESIGN LECTURE 24 11/10/2011

Design Pattern. CMPSC 487 Lecture 10 Topics: Design Patterns: Elements of Reusable Object-Oriented Software (Gamma, et al.)

Laboratorio di Sistemi Software Design Patterns 2

CS560. Lecture: Design Patterns II Includes slides by E. Gamma et al., 1995

Introduction to Software Engineering (2+1 SWS) Winter Term 2009 / 2010 Dr. Michael Eichberg Vertretungsprofessur Software Engineering Department of

Design Patterns. Decorator. Oliver Haase

Introduction and History

Using Design Patterns in Java Application Development

Design Patterns IV. Alexei Khorev. 1 Structural Patterns. Structural Patterns. 2 Adapter Design Patterns IV. Alexei Khorev. Structural Patterns

CSCD01 Engineering Large Software Systems. Design Patterns. Joe Bettridge. Winter With thanks to Anya Tafliovich

EPL 603 TOPICS IN SOFTWARE ENGINEERING. Lab 6: Design Patterns

Adapter pattern. Acknowledgement: Freeman & Freeman

The Strategy Pattern Design Principle: Design Principle: Design Principle:

Software Engineering - I An Introduction to Software Construction Techniques for Industrial Strength Software

Brief Note on Design Pattern

Design Pattern What is a Design Pattern? Design Pattern Elements. Almas Ansari Page 1

CISC 322 Software Architecture

Produced by. Design Patterns. MSc in Communications Software. Eamonn de Leastar

Software Design Patterns. Background 1. Background 2. Jonathan I. Maletic, Ph.D.

EECS 4314 Advanced Software Engineering. Topic 04: Design Pattern Review Zhen Ming (Jack) Jiang

Design for change. You should avoid

SOFTWARE PATTERNS. Joseph Bonello

The 'Gang of Four' Companion

Design Patterns. GoF design patterns catalog

Design Patterns. State. Oliver Haase

LOG6306 : Études empiriques sur les patrons logiciels

Design Patterns. Definition of a Design Pattern

Lectures 24 and 25 Introduction to Architectural Styles and Design Patterns

Design Patterns. Observer Pattern*

Design Patterns Reid Holmes

Component ConcreateComponent Decorator ConcreateDecoratorA ConcreteDecoratorB

2.1 Design Patterns and Architecture (continued)

Design Patterns Design patterns advantages:

Design Patterns. Dr. Rania Khairy. Software Engineering and Development Tool

An Introduction to Patterns

CSCD01 Engineering Large Software Systems. Design Patterns. Joe Bettridge. Winter With thanks to Anya Tafliovich

Design Patterns. Lecture 10: OOP, autumn 2003

What are patterns? Design Patterns. Design patterns. Creational patterns. The factory pattern. Factory pattern structure. Lecture 10: OOP, autumn 2003

DESIGN PATTERNS Course 4

CS342: Software Design. November 21, 2017

COSC 3351 Software Design. Design Patterns Behavioral Patterns (II)

CS 349 / SE 382 Design Patterns. Professor Michael Terry January 21, 2009

Design Patterns V Structural Design Patterns, 2

2.1 Design Patterns and Architecture (continued)

Keywords: Abstract Factory, Singleton, Factory Method, Prototype, Builder, Composite, Flyweight, Decorator.

Socket attaches to a Ratchet. 2) Bridge Decouple an abstraction from its implementation so that the two can vary independently.

CS 2340 Objects and Design

Design Patterns. CSE870: Advanced Software Engineering (Design Patterns): Cheng

What is a Pattern? Lecture 40: Design Patterns. Elements of Design Patterns. What are design patterns?

COURSE 4 DESIGN PATTERNS

Design Patterns! Acknowledgements!

Software Reengineering Refactoring To Patterns. Martin Pinzger Delft University of Technology

Design Patterns. An introduction

Tecniche di Progettazione: Design Patterns

CSCD01 Engineering Large Software Systems. Design Patterns. Joe Bettridge. Winter With thanks to Anya Tafliovich

Software Engineering Prof. Rushikesh K.Joshi IIT Bombay Lecture-15 Design Patterns


DESIGN PATTERN - INTERVIEW QUESTIONS

Tecniche di Progettazione: Design Patterns

The Factory Method Pattern

Lecture 13: Design Patterns

Pattern Resources. Lecture 25: Design Patterns. What are Patterns? Design Patterns. Pattern Languages of Programming. The Portland Pattern Repository

Trusted Components. Reuse, Contracts and Patterns. Prof. Dr. Bertrand Meyer Dr. Karine Arnout

CSE870: Advanced Software Engineering (Cheng) 1

Design Patterns (Composite, Iterator)

Transcription:

1 Lecture 17: Design Patterns (part 2) Kenneth M. Anderson Object-Oriented Analysis and Design CSCI 4448/6448 - Spring Semester, 2005 2 Last Lecture Design Patterns Background and Core Concepts Examples Singleton, Factory Method, and Adapter

3 Goals of Lecture Cover Additional Design Patterns State Iterator Flyweight Decorator Observer Composite 4 State Intent Allow an object to alter its behavior when its internal state changes Motivation TCPConnection example A TCPConnection class must respond to an open operation differently based on its current state: established, closed, listening, etc. Previous Example In lecture 12, we saw the State pattern being used in our MessageBuilder example the MessageBuilder would respond differently to timeout events and selection events based on its current state

5 State, continued Applicability Use State when an object s behavior depends on its state operations have large, multipart conditional statements that depend on the object s state Participants Context defines the interface of interest to clients maintains an instance of a ConcreteState subclass State defines an interface for encapsulating the behavior associated with a particular state of the Context ConcreteState each subclass of State implements a different behavior that implements the correct behavior for a particular state 6 State s Structure and Roles Context Request() state State operation() state->operation() ConcreteStateA operation() ConcreteStateB operation()

7 State, continued Collaborations Context delegates state-specific requests to the current ConcreteState object A context may pass itself as an argument to the State object handling the request Context is the primary interface for clients Either Context or ConcreteState subclasses can decide which state succeeds another and under what circumstances In the MessageBuilder example of Lecture 12, each ConcreteState object returned a pointer to the next state 8 State, continued Consequences State localizes state-specific behavior and partitions behavior for different states State makes state transitions explicit State objects can be shared Example See the code distributed with Lecture 12 for an example of the State Pattern

9 Iterator Intent Provide a way to access the elements of an aggregate object (e.g. a collection class) sequentially without exposing its underlying representation Also Known As Cursor Motivation A collection may have multiple ways of being traversed ; Iterator lets you keep traversal operations out of the core collection interface 10 Iterator, continued Applicability Use the Iterator pattern to access the contents of a collection without exposing its internals to support multiple traversals of collections to provide a uniform interface for traversing different collections Participants Iterator defines an interface for accessing and traversing elements ConcreteIterator implements Iterator interface and keeps track of current position within collection Aggregate (Collection Class Interface) defines an interface for creating an Iterator (factory method) ConcreteAggregate (Collection Class) implements the factory method

11 Iterator s Structure and Roles Aggregate CreateIterator() Client Iterator hasnext() next() remove() Concrete Aggregate CreateIterator() ConcreteIterator return new ConcreteIterator(this) 12 Iterator, continued Collaborations A ConcreteIterator keeps track of the current object in the aggregate and can compute the next object in the traversal Consequences The Iterator pattern supports multiple traversals for each collection (e.g. inorder, preorder, postorder for trees) Iterators simplify Aggregate interface More than one traversal can occur on a single collection at once; as long as the traversal is read-only

13 Iterator, continued Implementation The Iterator interface in the Java Collection classes java.util.iterator (interface) java.util.list (interface) java.util.linkedlist (class) java.util.listiterator (interface) implementing subclass is private within List class 14 Flyweight Intent Use sharing to support large numbers of fine-grained objects efficiently Motivation Imagine a text editor that creates one object per character in a document For large documents, that is a lot of objects! but for simple text documents, there are only 26 letters, 10 digits, and a handful of punctuation marks being referenced by all of the individual character objects

15 Flyweight, continued Applicability Use flyweight when all of the following are true An application uses a large number of objects Storage costs are high because of the sheer quantity of objects Most object state can be made extrinsic Many groups of objects may be replaced by relatively few shared objects once extrinsic state is removed The application does not depend on object identity. Since flyweight objects may be shared, identity tests will return true for conceptually distinct objects 16 Flyweight, continued Participants Flyweight declares an interface through which flyweights can receive and act on extrinsic state ConcreteFlyweight implements Flyweight interface and adds storage for intrinsic state UnsharedConcreteFlyweight not all flyweights need to be shared; unshared flyweights typically have children which are flyweights FlyweightFactory creates and manages flyweight objects Client maintains extrinsic state and stores references to flyweights

17 Flyweight s Structure and Roles FlyweightFactory GetFlyweight(key) flyweights Flyweight op(extrinsicstate) if (flyweights[key] exists) { return existing flyweight } else { create new flyweight add to pool of flyweights return the new flyweight } Client ConcreteFlyweight op(extrinsicstate) intrinsicstate 18 Flyweight, continued Collaborations Data that a flyweight needs to process must be classified as intrinsic or extrinsic Intrinsic is stored with client; Extrinsic is stored with client Clients should not instantiate ConcreteFlyweights directly Consequences Storage savings is a tradeoff between total reduction in number of objects verses the amount of intrinsic state per flyweight and whether or not extrinsic state is computed or stored greatest savings occur when extrinsic state is computed

19 Flyweight, continued See code example (released with lecture 13) Simple implementation of flyweight pattern Focus is on factory and flyweight rather than on client Demonstrates how to do simple sharing of characters 20 Decorator Intent Attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative to subclassing for extending functionality Also Known As Wrapper Motivation Sometimes we want to add responsibilities to individual objects, not to an entire class (like adding scrollbars to windows in GUI toolkits)

21 Decorator, continued Applicability Use Decorator to add responsibilities to individual objects dynamically for responsibilities that can be withdrawn when extension by subclassing is impractical Participants Component defines interface of objects to decorate ConcreteComponent defines an object to decorate Decorator and ConcreteDecorator Decorator maintains a reference to component and defines an interface that conforms to Component s interface; ConcreteDecorator adds responsibilities to the component 22 Decorator s Structure and Roles Component Operation() Concrete Component Operation() Decorator Operation() component component->operation() super->operation() AddedOperation() Concrete DecoratorA AddedState Operation() Concrete DecoratorB AddedState Operation() AddedOperation()

23 Decorator, continued Collaborations Decorator forwards requests to its Component object. It may optionally perform additional operations before and after forwarding the request 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 24 Observer Intent Define a one-to-many dependency between objects so that when one object changes states, all its dependents are notified and updated automatically Also Known As Dependants, Publish-Subscribe Motivation Need a way to update dependant objects while avoiding tight coupling User Interface Example

25 Observer, continued Applicability Use Observer when an abstraction has two aspects, one dependent on the other when a change to one object requires changing others when an object should notify objects but should not make assumptions about which objects need to be notified Participants Subject provides interface to add and delete observers Observer defines an updating interface for dependants ConcreteSubject stores the state being observed ConcreteObserver stores state that must be consistent with observed state 26 Observer s Structure and Roles Subject Attach(observer) Detach(observer Notify() observers Observer Update() for all o in observers o->update() ConcreteSubject GetState() SetState() subjectstate subject ConcreteObserver Update() observerstate subject->getstate()... update observer state...

27 Observer, continued Collaborations ConcreteSubject notifies observers whenever it changes its observed state After receiving a notification, ConcreteObserver gets state from ConcreteSubject see sequence diagram on page 295 of Design Patterns 28 Observer, continued Consequences Abstract coupling between Subject and Observer Subjects do not know the concrete subclasses of their observers Support for broadcast communication Subject does not know who is listening Unexpected updates Change in state may update an unintended object, one we didn t suspect was an observer, or should only be observing at well-defined times

29 Composite Intent Compose objects into tree structures to represent part-whole hierarchies Composite lets clients treat individual objects and compositions of objects uniformly Motivation Image programs that allow graphic primitives to be grouped into collections of objects Many operations are shared, such as move(), copy(), paste(), draw(), etc. 30 Composite, continued Applicability Use Composite when you want to represent part-whole hierarchies you want clients to be able to ignore the difference between compositions of objects and individual objects

31 Composite, continued Participants Component declares the shared interface declares child management operations empty methods for leaves defines an interface to retrieve parent Leaf implements shared interface Composite stores children implements shared interface by delegating to children implements child management operations Client Manipulates objects using the Component interface 32 Composite s Structure and Roles Client Component Operation() Add(Component) Remove(Component) GetChild(int) Leaf Operation() for all g in children g->operation() Composite Operation() Add(Component) Remove(Component) GetChild(int) children

33 Composite, continued Collaborations Client uses the Component interface to interact with all objects If the recipient is a leaf, then the request is handled directly If the recipient is a composite, then the request is delegated to its children 34 Composite, continued Consequences Composite allows primitive objects and composite objects to be treated transparently especially since the child management functions are defined in the Component interface Composite simplifies code in the client It makes it easy to add new types of leaves nothing needs to change to add a new type of component (not even the client) Disadvantage: Difficult to create composites that have only certain types of leaves; you need to subclass the Composite class and use run-time checks to make sure that only legal children are added to it

35 Summary Patterns are a design technique that can help you create more flexible software designs They describe generic solutions that can be applied to many different software systems We have now seen a number of patterns Adapter, Blackboard, Composite, Decorator, Double Dispatch, Factory Method, Flyweight, Iterator, Observable, Singleton, State Note: some patterns built on previous ones Factory Method appeared in Iterator A variation of Singleton appeared in Flyweight 36 What s Next? Refactoring How to improve the structure of a software system without changing its functionality Test-Driven Design How to evolve software systems by writing test cases FIRST! Spring Break! Design Patterns, part 3 Command, Facade, and more... Refactoring to Design Patterns Domain-Driven Design Information from the second textbook...