Chapter 8 structural design patterns
This presentation is the property of its rightful owner.
Sponsored Links
1 / 63

Chapter 8 Structural Design Patterns PowerPoint PPT Presentation


  • 47 Views
  • Uploaded on
  • Presentation posted in: General

Chapter 8 Structural Design Patterns. Process Phases Discussed in This Chapter. Requirements Analysis. Design. Framework. Architecture. Detailed Design. Implementation. Key:. = main emphasis. = secondary emphasis. x. x.

Download Presentation

Chapter 8 Structural Design Patterns

An Image/Link below is provided (as is) to download presentation

Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author.While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.


- - - - - - - - - - - - - - - - - - - - - - - - - - E N D - - - - - - - - - - - - - - - - - - - - - - - - - -

Presentation Transcript


Chapter 8 structural design patterns

Chapter 8Structural Design Patterns


Process phases discussed in this chapter

Process Phases Discussed in This Chapter

Requirements

Analysis

Design

Framework

Architecture

Detailed Design

Implementation

Key:

= main emphasis

= secondary emphasis

x

x

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Chapter 8 structural design patterns

Facade

Design Purpose

Provide an interface to a package of classes

Design Pattern Summary

Define a singleton which is the sole means for obtaining functionality from the package.

Notes: the classes need not be organized as a package; more than one class may be used for the façade.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Facade design pattern structure

Facade Design Pattern Structure

1

Façade

«exposed»

cMethodOfFacade()

Client

2

C

«not exposed»

myCMethod()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Chapter 8 structural design patterns

Sequence Diagram for Façade

:Client

singleton

:Facade

:C

cMethodOfFacade()

myCMethod()

(return if any)

(return if any)

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Using fa ade for architecture of a video game

Using Façade for Architecture of a Video Game

MyGameEngine

MyGame

«facade»

MyGameCharacters

MyGameCast

«facade»

MyGameEnvironment

MyGameEnvironment

«facade»

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Design goals at work correctness and reusability

Design Goals At Work: Correctness and Reusability

Collecting customer-related classes in a package with a clear interface clarifies the design, allows independent verification, and makes this part reusable.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Using fa ade to access bank customers

Using Façade to Access Bank Customers

Customer

getCustomerName()

getNumAccounts()

getPersonalNote()

getAccount( int )

Account

getAccountNum()

deposit( int )

getBalance()

AccountException

CustomerException

framework

1..n

BankCustomer

BankAccount

IntroMessage

«facade»

BankCustomers

doDeposit( int amt, Customer cust, Account acc )

getBankAccount( Customer cust, int accNum )

getBankCustomer( String custName )

introduceApplication()

Client

main()

bankCustomers

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Output of fa ade banking example

Output of Façade Banking Example

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Key concept facade design pattern

Key Concept: Facade Design Pattern 

-- modularizes designs by hiding complexity

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Chapter 8 structural design patterns

Decorator

Design Purpose

Add responsibilities to an object at runtime.

Design Pattern Summary

Provide for a linked list of objects, each encapsulating responsibility.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Decorator class model

Decorator Class Model

Component

add( Component )

doAction()

1

Client

Substance

doAction()

Decoration

doAction()

objDecorated

void doAction()

{ ….. // do actions special to this decoration

objDecorated.doAction(); // pass along

}

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Linked objects in decorator

Linked Objects in Decorator

client:Client

decoration1:Decoration

decoration1.objectDecorated:Decoration

… :Decoration

….:Substance

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Chapter 8 structural design patterns

Sequence Diagram for Decorator

:Client

decoration1

:Decoration

Decoration1.objDecorated

:Decoration

:Substance

doAction()

doAction()

doAction()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Output of customer account example

Output of Customer/Account Example

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Decorator applied to customer accounts example

Decorator Applied to Customer / Accounts Example

AttemptToAddBadBankingComponentException

BankingComponent

add( Component )

describe()

1

Client

nextComponent

Setup

Customer

describe()

Account

describe()

CheckAccount

describe()

getLastCheckNum(): int

SavingsAccount

describe()

getInterestRate(): int

CDAccount

describe()

getDuration(): int

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Use of decorator in java io

Use of Decorator in java.io

Reader

1

InputStreamReader

BufferedReader

InputStream

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Java io decorator example

java.ioDecorator example

: BufferedStreamReader

:InputStreamReader

System.in:InputStream

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Key concept decorator design pattern

Key Concept: Decorator Design Pattern 

-- allows addition to and removal from objects at runtime

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Chapter 8 structural design patterns

Composite

Design Purpose

Represent a Tree of Objects

Design Pattern Summary

Use a Recursive Form in which the tree class aggregates and inherits from the base class for the objects.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Basis for composite class model

Basis for Composite Class Model

Objects

non-leaf node

leaf node

1..n

Classes

Component

“non-leaf nodes have one or more components”

“every object involved

is a Component object”

NonLeafNode

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Composite class model

Composite Class Model

Component

add( Component )

doIt()

1..n

Client

FOR ALL elements e in component

e.doIt()

LeafNode

doIt()

NonLeafNode

doIt()

component

TypeANonLeafNode

doIt()

TypeBNonLeafNode

doIt()

etc.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Chapter 8 structural design patterns

Sequence Diagram for Composite

:Client

nonLeaf1

:NonLeafNode

nonLeaf1ChildX

:NonLeafNode

:LeafNode

nonLeaf1ChildX

:NonLeafNode

:LeafNode

nonLeaf1ChildX

:NonLeafNode

:LeafNode

doIt()

doIt()

doIt()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Employee hierarchy

Employee Hierarchy

Pete

:President

Able

:Manager

Becky

:Manager

Tina

:Teller

Lonny

:Teller

Cal

:Clerk

Thelma

:Teller

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Design goal at work flexibility correctness

Design Goal At Work: Flexibility, Correctness

We need to add and remove employees at runtime and execute operations on all of them.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Bank teller example

Bank/Teller Example

1..n

Employee

stateName()

Client

reports

Clerk

stateName()

Teller

stateName()

Supervisor

add(Employee)

Setup

Manager

stateName()

President

stateName()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Chapter 8 structural design patterns

Sequence Diagram for Bank/Teller Example

:Setp

:Client

pete

:President

xxxx

:Employee

xxxx

:Employee

xxxx

:Employee

xxxx

:Employee

*

doClientTasks()

stateName()

stateName()

  • Creates the tree of Employee objects

  • with Pete as President

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Output of bank teller example

Output of Bank/Teller Example

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Composite in java awt

Composite in java.awt

Component

1..n

Container

component

… . .

Window

Canvas

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Attempt to simplify composite

Attempt to Simplify Composite

children

Component

0…n

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Key concept composite design pattern

Key Concept: Composite Design Pattern 

-- used to represent trees of objects.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Chapter 8 structural design patterns

Adapter

Design Purpose

Allow an application to use external functionality in a retargetable manner.

Design Pattern Summary

Write the application against an abstract version of the external class; introduce a subclass that aggregates the external class.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Adapter example

Adapter Example

AbstractClass

clientNameForRequiredMethod()

RequiredClass

requiredMethod()

Client

adaptee

Adapter

clientNameForRequiredMethod()

{ adaptee. requiredMethod();}

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Chapter 8 structural design patterns

Sequence Diagram for Adapter

:Client

:AbstractClass

:Adapter

adaptee

:RequiredClass

clientNameForRequiredMethod()

RequiredMethod()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Design goal at work flexibility and robustness

Design Goal At Work: Flexibility and Robustness

We want to separate the application as a whole from financial calculations which will be performed externally.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Adapter design pattern

Adapter Design Pattern

Application

Adaptation

Legacy system

Financial

amount()

Principle

computeValue()

Client

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Java listeners as adapters

Java Listeners as Adapters

actionListener

ActionListener

Result of button press

MyButton

addActionListener()

MyClass

myMethod()

Adaptation

MyListener

actionPerformed()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Adapter example inheritance version

Adapter Example: Inheritance Version

AbstractClass

standinForRequiredMethod()

RequiredClass

requiredMethod()

Client

Adapter

standinForRequiredMethod()

{ requiredMethod();}

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Key concept adapter design pattern

Key Concept: Adapter Design Pattern 

-- to interface flexibly with external functionality.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Chapter 8 structural design patterns

Flyweight

Design Purpose

Manage a large number of objects without constructing them all.

Design Pattern Summary

Share representatives for the objects; use context to obtain the effect of multiple instances.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Flyweight class model

Flyweight Class Model

Client

Flyweight

1..n

Flyweight

doAction(Context)

FlyweightFactory

getFlyweight(Characteristic)

ConcreteFlyweight

doAction(Context)

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Chapter 8 structural design patterns

Sequence Diagram for Flyweight

:Client

:FlyweightFactory

flyweight

:Flyweight

getFlyweight()

flyweight

Get context

. . . .

doAction( context )

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Flyweight example text magnifier

Flyweight Example: Text Magnifier

Input

ABBRA CADABBRAA ARE THE FIRST TWO OF MANY WORDS IN THIS FILE …

1

Input color: RED ….. Starting character: 2 … Ending character: 3

2

Output

. . . . . .

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


When space is no limitation linked bigcharacter objects

When Space is No Limitation:Linked BigCharacter Objects

A1:BigACharacter

color “red”

letter “o”…

B1:BigBCharacter

color == “red”

B1:BigBCharacter

color “red”

letter “v”…

A1:BigACharacter

color == “black”

B2:BigBCharacter

color “black”

letter “v”…

R1:BigRCharacter

color “black”

letter “x”…

A2:BigACharacter

color “black”

letter “o”…

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Design goal at work space efficiency

Design Goal At Work: Space Efficiency

We want to avoid proliferating an object for every big character to be displayed.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Mapping a b etc to a biga bigb etc object

Mapping “A”, “B” etc. to a BigABigB etc. object

Client Responsibilities

DP Responsibilities

Use string to determine which flyweight . Use color information to form the context (parameter value).

Make (shared) BigA, BigB, … flyweightobject available to clients

ABBRA CADABBRA …

color “RED” begins 0 …

Flyweights (1 each)

bigA:BigA

getMatrix( ”red” )

Line

for output

bigB:BigB

. . . . . .

getMatrix( “black” )

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Typical output for large type example

Typical Output For Large Type Example

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Bigcharacter flyweight application class model

BigCharacter Flyweight Application: Class Model

PagePrinter

Application of Flyweight

BigChar

constructionChar

getMatrix( String color )

26

BigCharFactory

getFlyweight( char )

«singleton»

BigA

«singleton»

BigB

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Key concept flyweight design pattern

Key Concept: Flyweight Design Pattern 

-- to obtain the benefits of a large set of individual objects without efficiency penalties.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Chapter 8 structural design patterns

Proxy

Design Purpose

Avoid the unnecessary execution of expensive functionality in a manner transparent to clients.

Design Pattern Summary

Interpose a substitute class which accesses the expensive functionality only when required.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Proxy design pattern

Proxy Design Pattern

Client

Adaptation

BaseActiveClass

expensiveMethod()

anotherMethod()

Instantiate with

Proxy object

RealActiveClass

expensiveMethod()

anotherMethod()

Proxy

expensiveMethod()

anotherMethod()

realActiveObject

. . . // One way to check if really needed:

if ( realActiveObject == null ) // never referenced

{ realActiveObject = getRealActiveObject();

realActiveObject.expensiveMethod();

}

else // try to avoid calling the real expensiveMethod()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Chapter 8 structural design patterns

Sequence Diagram for Proxy

:Client

:Proxy

:RealActiveClass

expensiveMethod()

( if needed: )

realExpensiveMethod()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


I o of telephone record proxy example

I/O of Telephone Record Proxy Example

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Design goal at work efficiency and reuse

Design Goal At Work: Efficiency and Reuse

Avoid unnecessary data downloads.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Proxy example

TelNums

value: Vector

getTelNums(): Vector

showMiddleRecord()

Proxy Example

TelephoneApp

display( TelNums )

display MiddleRecord()

static

RemoteTelNums

getTelNums()

TelNumsProxy

getTelNums()

1

remoteTelNums

Setup

. . . // One way to check if really needed:

if ( value == null ) // never referenced

remoteTelNums.getTelNums();

else // no need to call ‘getTelNums()’

Ensures that TelephoneApp makes calls with TelNumsProxy

instance

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Key concept proxy design pattern

Key Concept: Proxy Design Pattern 

-- to call expensive or remote methods.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Summary of structural patterns

Summary of Structural Patterns

Structural Design Patterns relate objects (as trees, lists etc.)

  • Facade provides an interface to collections of objects

  • Decorator adds to objects at runtime

  • Composite represents trees of objects

  • Adapter simplifies the use of external functionality

  • Flyweight gains the advantages of using multiple instances while minimizing space penalties

  • Proxy avoids calling expensive operations unnecessarily

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Queuing configuration exercise

“Queuing Configuration” Exercise

Customer being served

Queues

Tellers

c c c

c

Lonny

c

Juanita

Key: “c”

== a customer

c c c c c

c

Tina

c

Thelma

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Solution to exercise 8 1 queueing configurations

Solution to Exercise 8.1 “Queueing Configurations”

1..n

Queue

….()

Client

queues

QueueForOneTeller

….()

Teller

Setup

QueueForTellers

add( Queue

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Using fa ade

Using Façade

InventoryItemException

Inventory

…( … )

InventoryItem

…( … )

inventoryFramework

Xinventory

…( … )

1..n

Toaster

Toaster

Toaster

1

XIntroMessage

«facade»

XInventoryFacade

…( … )

Client

main()

xInventory

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Decorator applied to construction example

Decorator Applied to Construction Example

construction

ConstructionComponent

add( Component )

showPrice()

1

Client

nextComponent

Setup

ConstrJob

add()

showPrice()

ConstrMaterial

showPrice()

Window

showPrice()

Door

showPrice()

Beam

showPrice()

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Typical stencil placement on a wall

Typical Stencil Placement on a Wall

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


Typical wall perspective

Typical Wall Perspective

etc.

Adapted from Software Design: From Programming to Architecture by Eric J. Braude (Wiley 2003), with permission.


  • Login