cs 210 final review november 28, 2006. cs 210 adapter pattern

105
CS 210 Final Review November 28, 2006

Upload: ann-cook

Post on 18-Jan-2016

218 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

CS 210

Final Review

November 28, 2006

Page 2: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

CS 210

Adapter Pattern

Page 3: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Adapters in real life

Page 236 – Head First Design Patterns

Page 4: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Object-Oriented Adapters

Page 237 Head First Design Patterns

Page 5: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Turkey that wants to be a duck example

public interface Duck {

public void quack();

public void fly();

}

Page 6: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Subclass of a duck – Mallard Duck

public class MallardDuck implements Duck {

public void quack() {

System.out.println("Quack");

}

public void fly() {

System.out.println("I'm flying");

}

}

Page 7: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Turkey Interface

public interface Turkey {

public void gobble();

public void fly();

}

Page 8: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

An instance of a turkey

public class WildTurkey implements Turkey {

public void gobble() {

System.out.println("Gobble gobble");

}

public void fly() {

System.out.println("I'm flying a short distance");

}

}

Page 9: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Turkey adapter – that makes a turkey look like a duckpublic class TurkeyAdapter implements Duck {

Turkey turkey; public TurkeyAdapter(Turkey turkey) {

this.turkey = turkey;}

public void quack() {turkey.gobble();

} public void fly() {

for(int i=0; i < 5; i++) {turkey.fly();

}}

}

Page 10: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Duck test drivepublic class DuckTestDrive {

public static void main(String[] args) {MallardDuck duck = new MallardDuck();

WildTurkey turkey = new WildTurkey();Duck turkeyAdapter = new TurkeyAdapter(turkey);

System.out.println("The Turkey says...");turkey.gobble();turkey.fly();

System.out.println("\nThe Duck says...");testDuck(duck);

System.out.println("\nThe TurkeyAdapter says...");testDuck(turkeyAdapter);

} static void testDuck(Duck duck) {

duck.quack();duck.fly();

}}

Page 11: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Test run – turkey that behaves like a duckThe Turkey says...Gobble gobbleI'm flying a short distance

The Duck says...QuackI'm flying

The TurkeyAdapter says...Gobble gobbleI'm flying a short distanceI'm flying a short distanceI'm flying a short distanceI'm flying a short distanceI'm flying a short distance

Page 12: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Adapter Pattern explained

Page 241 – Head First Design Patterns

Page 13: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Adapter Pattern defined

The Adapter Pattern converts the interface of a class into another interface the clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.

Page 14: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Adapter Pattern

Page 243 – Head First Design Patterns

Page 15: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Façade Pattern

Simplifying complex subsystems

Page 16: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Page 255 – Head First Design Patterns

Page 17: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Watching the movie the hard way….

Page 256 – Head First Design Patterns

Page 18: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

What needs to be done to watch a movie….

Page 19: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 20: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Façade Pattern defined

The Façade Pattern provides a unified interface to a set of interfaces in a subsystem. Façade defines a higher level interface that makes the subsystem easier to use.

Page 21: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Façade pattern – Class Diagram

Page 22: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Design Principle

Principle of Least Knowledge

talk only to your immediate friends

Basically this says minimize your dependencies

Page 23: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Client

The client only hasone friend – andthat is a good thing

If the subsystemgets too complicatedOne can recursivelyapply the same principle.

Page 24: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

A little comparison

Pattern Intent

DecoratorConverts one interfaceto another

AdapterDoesn’t alter the interface,But adds responsibility

Facade Makes an interface simpler

Page 25: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

CS 210

Template Method Pattern

Page 26: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 27: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 28: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 29: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Abstracted Recipe method

Page 30: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Abstract base classpublic abstract class CaffeineBeverage { final void prepareRecipe() {

boilWater();brew();pourInCup();addCondiments();

} abstract void brew(); abstract void addCondiments(); void boilWater() {

System.out.println("Boiling water");}

void pourInCup() {System.out.println("Pouring into cup");

}}

Page 31: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Coffee and Tea in terms of the abstract caffeine classpublic class Coffee extends CaffeineBeverage {

public void brew() {System.out.println("Dripping Coffee through filter");

}public void addCondiments() {System.out.println("Adding Sugar and Milk");}

}

public class Tea extends CaffeineBeverage {public void brew() {

System.out.println("Steeping the tea");}public void addCondiments() {

System.out.println("Adding Lemon");}

}

Page 32: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 33: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 34: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Template Method Pattern defined

The Template Method Pattern defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.

Page 35: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 36: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 37: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 38: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Design Principle

The Hollywood Principle

Don’t call us, we’ll call you.

Page 39: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 40: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 41: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 42: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

CS 210

Iterator Pattern

Page 43: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Example to motivate discussion

We have two lists (of menu items) one implemented using ArrayList and another using Arrays.

How does one work with these two implementations of lists in a uniform way?

Example here uses restaurant items

Page 44: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Now if we want to…

printMenu()• Print every item on the menu

printBreakfastMenu()• Print just breakfast items

printLunchMenu()• Print just lunch items

printVegetarianMenu() isItemVegetarian(name)

Page 45: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Iterating through breakfast items

Page 46: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Iterating through lunch items

Page 47: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Encapsulating iteration

Instead of using multiple ways to iterate through the lists, define ONE interface to iterate through the lists …

Page 48: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Using iterator to get breakfast items

Page 49: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Using iterator to get lunch items

Page 50: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Meet the iterator pattern…

Page 51: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

DinerMenuIterator

Page 52: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Iterator Pattern defined

The Iterator Pattern provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation.

Page 53: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 54: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Design principle applied to Iterator pattern

Iterator pattern places the task of traversal on the iterator object, not on the aggregate, which simplifies the aggregate interface and implementation, and places the responsibility where it should be.

Page 55: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 56: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 57: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 58: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 59: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Iterators and collections

Page 60: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

CS 210

Iterator & Composite Pattern

Page 61: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Adding to the menu scenario…

Page 62: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 63: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 64: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Composite Pattern defined

The Composite Pattern allows you to compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.

Page 65: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Using composite pattern

Page 66: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Composite Pattern

Page 67: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Complex hierarchy of menu items

Page 68: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Composition treated as one entity or as parts

Page 69: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Operations applied to whole or parts

Page 70: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 71: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 72: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 73: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

CS 210

State Pattern

Page 74: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Example: Managing States

Page 75: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Design using State

Page 76: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 77: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 78: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 79: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 80: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 81: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

State Pattern defined

The State Pattern allows an object to alter its behavior when its internal state changes. The object will appear to change its class.

Page 82: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

State Pattern Class Diagram

Page 83: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Comparison of patterns

Page 84: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

CS 210

Proxy Pattern

Page 85: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Revisit the Gumball machine example

The same example covered in the State pattern

Now we want to add some monitor a collection of Gumball machines

Page 86: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Gumball Class

Page 87: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Gumball Monitor

Page 88: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Role of the remote Proxy

Page 89: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

RMI Detour in looking at Proxy Pattern

Page 90: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Remote Methods 101

Page 91: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

How the method call happensClient calls method

Page 92: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Client Helper forwards to service helper

Page 93: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Service helper calls the real object

Page 94: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Real object returns result

Page 95: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Service helper forwards result to client helper

Page 96: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Client helper returns result to client

Page 97: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 98: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Hooking up client and server objects

Page 99: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern
Page 100: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Back to Gumball machine problem

Page 101: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Proxy Pattern defined

The Proxy Pattern provides a surrogate or placeholder for another object to control access to it.

The proxy pattern is used to create a representative object that controls access to another object, which may be remote, expensive to create or in need of securing.

Page 102: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Proxy Class Diagram

Page 103: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Summary so far.. OO Basics

• Abstraction• Encapsulation• Inheritance• Polymorphism

OO Principles• Encapsulate what varies• Favor composition over inheritance• Program to interfaces not to implementations• Strive for loosely coupled designs between objects that interact• Classes should be open for extension but closed for modification.• Depend on abstracts. Do not depend on concrete classes.• Only talk to your friends• Don’t call us, we will call you• A class should have only one reason to change.

Page 104: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

Summary so far… OO Patterns

• Strategy Pattern defines a family of algorithms, Encapsulates each one, and makes them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

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

• Decorator Pattern – attach additional responsibilities to an object dynamically. Decorators provide a flexible alternative for sub-classing for extending functionality

• Abstractor Factory – Provide an interface for creating families of related or dependent objects without specifying their concrete classes.

• Factory Method – Define an interface for creating an object, but let subclasses decide which class to instantiate. Factory method lets a class defer instantiation to the subclasses.

• Command Pattern – Encapsulates a request as an object, thereby letting you parameterize clients with different requests, queue or log requests, and support undoable operations.

Page 105: CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern

OO Patterns - Continued• The Adapter Pattern converts the interface of a class into another

interface the clients expect. Adapter lets classes work together that couldn’t otherwise because of incompatible interfaces.

• The Façade Pattern provides a unified interface to a set of interfaces in a subsystem. Façade defines a higher level interface that makes the subsystem easier to use.

• Template Method defines the skeleton of an algorithm in a method, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s structure.

• Iterator - provides a way to access the elements of an aggregate object sequentially without exposing its underlying representation.

• The Composite Pattern allows you to compose objects into tree structures to represent part-whole hierarchies. Composite lets clients treat individual objects and compositions of objects uniformly.

• The State Pattern allows an object to alter its behavior when its internal state changes. The object will appear to change its class.

• The Proxy Pattern provides a surrogate or placeholder for another object to control access to it.