Design Patterns SE464 Derek Rayside images from NetObjectives.com - - PowerPoint PPT Presentation

design patterns
SMART_READER_LITE
LIVE PREVIEW

Design Patterns SE464 Derek Rayside images from NetObjectives.com - - PowerPoint PPT Presentation

Design Patterns SE464 Derek Rayside images from NetObjectives.com & Wikipedia modes of normal composition fitness for future Creational Structural Behavioural Abstract Factory Adapter Chain of Responsibility Builder Bridge Command


slide-1
SLIDE 1

Design Patterns

SE464 Derek Rayside images from NetObjectives.com & Wikipedia

slide-2
SLIDE 2

modes of normal composition fitness for future

slide-3
SLIDE 3

Creational Structural Behavioural Abstract Factory Builder Factory Method Prototype Singleton Adapter Bridge Composite Decorator Facade Flyweight Proxy Chain of Responsibility Command Interpreter Iterator Mediator Memento Observer State Strategy Template Method Visitor

slide-4
SLIDE 4

Creational Structural Behavioural Singleton Adapter Bridge Composite Facade Command Interpreter Observer Strategy Visitor

slide-5
SLIDE 5

Creational Structural Behavioural Singleton Adapter Bridge Facade Command Observer Strategy

slide-6
SLIDE 6

Creational Structural Behavioural Singleton Adapter Bridge Observer Strategy

slide-7
SLIDE 7

Observer (Publish/Subscribe)

Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.

slide-8
SLIDE 8

Observer (Publish/Subscribe)

Define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.

slide-9
SLIDE 9

Observer (Publish/Subscribe)

Design challenge: the observers need to know more

slide-10
SLIDE 10

Observer (Publish/Subscribe)

Design challenge: the observers need to know more Solution 1: add parameters to notify method

public interface Observer { public notify(String acct, double amt, String emailAddr, String overdraftAcct); } public Audit implements Observer { public void notify(String auditedAccount, double overdrawnAmount, String ignoreEmailAddr, String ignoreOverdraftAcct) { // write info to log, take other appropriate action } }

slide-11
SLIDE 11

Observer (Publish/Subscribe)

Complications: Need to add new parameters in all existing Listeners May be sending unused data to Listeners

slide-12
SLIDE 12

Observer (Publish/Subscribe)

Design challenge: the observers need to know more Solution 2: callbacks

slide-13
SLIDE 13

Observer (Publish/Subscribe)

Complications: May reveal too much information to Listeners Solution: pass a Msg object that encapsulates the Account information instead of passing Account object by reference Each listener will be blocked until previous listeners are done (in single-threaded situations) The state of the objects passed to Listeners might change in concurrent applications

slide-14
SLIDE 14

Observer (Publish/Subscribe)

Design challenge: the observers need to know more Solution 3: reify the event

slide-15
SLIDE 15

Observer (Publish/Subscribe)

Design challenge: the observers need to know more Solution 4: new Observer interface Very simple How to distinguish between the old (legacy) interface and the new Observer interface

  • ex. The new interface extends old interface and adds

two new methods.

slide-16
SLIDE 16

Strategy

Vary the algorithm independently of the clients who use it.

slide-17
SLIDE 17

Strategy

Vary the algorithm independently of the clients who use it.

slide-18
SLIDE 18

Strategy

Vary the algorithm independently of the clients who use it.

  • 1. Who chooses the strategy?
  • 2. Are strategy objects mutable?

Examples: Strategy used to sort a list of numbers - if known the list is almost sorted, use merge sort; otherwise use quicksort

slide-19
SLIDE 19

Strategy

Who chooses the strategy?

  • a. client
  • b. context
  • c. config file

(not pictured)

slide-20
SLIDE 20

Strategy

Mutable Strategy Objects easier to return more complex results need to be instantiated for each use Stateless Strategy Objects reusable re-entrant simpler API usage rules can be Singleton

slide-21
SLIDE 21

Singleton

Ensure a class has only one instance, and provide a global point of access to it.

slide-22
SLIDE 22

Singleton

Advantages convenience controlled access reduced namespace can substitute alternatives more flexible than static methods Issues global variables make testing harder synchronization may reduce parallelism memory leaks initialization class-loaders vs VMs distributed systems may hinder re-use

slide-23
SLIDE 23

Singleton: traditional implementation

public class Singleton { private static final Singleton INSTANCE = new Singleton(); // Private constructor prevents external instantiation private Singleton() {} public static Singleton getInstance() { return INSTANCE; } }

slide-24
SLIDE 24

Singleton: safer initialization [Pugh]

public class Singleton { // Private constructor prevents external instantiation private Singleton() {} /** * SingletonHolder is loaded on the first execution * of Singleton.getInstance() or the first access to * SingletonHolder.INSTANCE, not before. */ private static class SingletonHolder { static final Singleton INSTANCE = new Singleton(); } public static Singleton getInstance() { return SingletonHolder.INSTANCE; } }

slide-25
SLIDE 25

Adapter (Wrapper)

Convert the interface of a class into another interface clients expect.

slide-26
SLIDE 26

Adapter

slide-27
SLIDE 27

Adapter

To consider:

  • 1. Large delta between local & foreign => facade
  • 2. Exceptions?
  • 3. Instantiation?
  • 4. Does the adapter need to add functionality?

example: SWT and Swing.

  • 5. Stateful? Probably shouldn't be.
slide-28
SLIDE 28

Bridge

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

slide-29
SLIDE 29

Bridge

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

slide-30
SLIDE 30

Adapter vs Bridge

Adapter connection unforseen interfaces already exist Bridge connection forseen need to be able to subclass both abstraction and implementation

slide-31
SLIDE 31

Other patterns you need to know

Lectures so far & Lab1 visitor interpreter iterator composite Reading & Future Lecture facade [cf Bowman] command

slide-32
SLIDE 32

Comprehension Questions

What are some ways of adapting an existing Observer class when more information is needed by a type of event? What are some pros and cons of these methods? Name some benefits and downsides of mutable and stateless Strategy objects. What are some issues with the Singleton pattern? Name some uses of the Strategy, Adapter, Singleton, Bridge, and Observer patterns. In GUI Framework, when a button is pressed, an OnButtonPressed event is received. What type of pattern is being used? Answer: Observer Design Pattern is used. All the Observers (or Listeners in Java) are notified.

slide-33
SLIDE 33

Comprehension Questions

Why is it generally considered bad practice to have mutable Singleton classes? What are some differences between the Adapter and the Bridge design pattern? Give an example of both to support your answer. In Java, switching between different layouts using a context makes use of what design pattern? Answer: Strategy Design Pattern