CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern.

105
CS 210 Final Review November 28, 2006

Transcript of CS 210 Final Review November 28, 2006. CS 210 Adapter Pattern.

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.