Design patterns
This presentation is the property of its rightful owner.
Sponsored Links
1 / 13

Design Patterns PowerPoint PPT Presentation


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

Design Patterns. Video Rental System. VideoDescription. barCode title type ……. 1 *. Member. Rental. *. name address phoneNumber creditCard# emailAddress userName password. rentalStore rentalDate dueDate returnDate returnTime. VideoCopy. 1 *. rents.

Download Presentation

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


Design patterns

Design Patterns


Video rental system

Video Rental System

VideoDescription

barCode

title

type

……..

1

*

Member

Rental

*

name

address

phoneNumber

creditCard#

emailAddress

userName

password

rentalStore

rentalDate

dueDate

returnDate

returnTime

VideoCopy

1 *

rents

* 1

copyID

request

  • Rental of each movie is determined by the type.

  • There are currently in the system three types of movies

  • New releases have a rental fee of $3.00

  • Children’s movies rent for $1.00

  • All other movies rent for $2.00


Video rental system1

Video Rental System

VideoDescription

barCode

title

type

……..

1

*

Member

Rental

*

name

address

phoneNumber

creditCard#

emailAddress

userName

password

rentalStore

rentalDate

dueDate

returnDate

returnTime

VideoCopy

1 *

rents

* 1

copyID

request

  • In design you realized you realized you needed a method to make the statement to for the rentals…(you might have placed it in MEMBER or the use case class RENTVIDEO

  • While other code would be present, there would be a method that calculates the cose of the movie depending on the days and the price of the movie

  • There would be a switch or case statement to select the price depending on the type


Video rental system2

Video Rental System

public Void makeStatement() {

int price = 0, total = 0, int days

Iterator videos = rents.iterator();

…..

while (videos.hasNext()) {

Rental rents = (Rental) videos.next();

int type = rents.getMovie().getType();

switch (type) {

case Movie.REGULAR: price = 200; break;

case Movie.NEWRELEASE: price = 300; break;

case Movie.CHILDREN: price = 100; break;

days = computeDays(rentalDate);

cost = days * price;

}……..


Video rental system3

Video Rental System

public Void makeStatement() {

int price = 0, total = 0

Iterator videos = rents.iterator();

…..

while (videos.hasNext()) {

Rental rents = (Rental) videos.next();

int type = rents.getMovie().getType();

switch (type) {

case Movie.REGULAR: price = 200; break;

case Movie.NEWRELEASE: price = 300; break;

case Movie.CHILDREN: price = 100; break;

days = computeDays(rentalDate);

cost = days * price;

…..

Make this a method called computeCost


Video rental system4

Video Rental System

public Void makeStatement() {

int price = 0, total = 0

Iterator videos = rents.iterator();

…..

while (videos.hasNext()) {

Rental rents = (Rental) videos.next();

int type = rents.getMovie().getType();

switch (type) {

case Movie.REGULAR: price = 200; break;

case Movie.NEWRELEASE: price = 300; break;

case Movie.CHILDREN: price = 100; break;

days = computeDays(rentalDate);

cost = days * price;

…..

Now it is a method that returns the cost of the rental and should probably be placed in the RENTAL CLASS

Rental

rentalStore

rentalDate

dueDate

returnDate

returnTime

computeDays

computeCost


Video rental system5

Video Rental System

public Void makeStatement() {

int price = 0, total = 0

Iterator videos = rents.iterator();

…..

while (videos.hasNext()) {

Rental rents = (Rental) videos.next();

int type = rents.getMovie().getType();

switch (type) {

case Movie.REGULAR: price = 200; break;

case Movie.NEWRELEASE: price = 300; break;

case Movie.CHILDREN: price = 100; break;

days = computeDays(rentalDate);

cost = days * price;

…..

BUT: getCost uses type from from the MovieDescription to decide the price. We could pass the days to MovieDescription and have it select the price since it has the type.

VideoDescription

barCode

title

Type

getCost (days)

……..


Video rental system6

Video Rental System

public Void makeStatement() {

int price = 0, total = 0

Iterator videos = rents.iterator();

…..

while (videos.hasNext()) {

Rental rents = (Rental) videos.next();

int type = rents.getMovie().getType();

switch (type) {

case Movie.REGULAR: price = 200; break;

case Movie.NEWRELEASE: price = 300; break;

case Movie.CHILDREN: price = 100; break;

days = computeDays(rentalDate);

cost = days * price;

…..

Still: getCost currently are not exploiting dynamic binding to make the case decisions

==> sub-classing of three different sub-types: Regular, NewRelease, and Children would allow this

VideoDescription

Children

NewRelease

Regular


Video rental system7

Video Rental System

VideoDescription

barCode

title

type

……..

Children

NewRelease

Regular

getCost

getCost

getCost

NOTE: even more flexibility can be achieved if the class model is developed further to a framework by applying a construct like the Strategy Pattern.


Video rental system8

Video Rental System

9. step -> additional flexibility by adding a class Price responsible for the pricing strategy acting as framework hot-spot

VideoDescription

barCode

title

type

……..

Price

getCost

Children

NewRelease

Regular

getCost

getCost

getCost

So we add a class responsible for the pricing strategy……


Video rental system9

Video Rental System

abstract class Price {

public abstract int getCost (int days);

}

class Regular extends Price {

public int getCost (int days) {

return days * 200;

}

}

class NewRelease extends Price {

public int getCost (int days) { return days * 300; }

}

}

class Children extends Price {

public int getCost (int days) {

return days * 100;

}

}

…..


Video rental system10

Video Rental System

class MovieDescription {

private String title; …….

private Price pricing;

…..

public Price getPrice () { return price; }

….

public int getCharge (int days) { return pricing.getCost(days); }

}


Video rental system11

Video Rental System

class Rental {

private MovieDescription movie;

private int days;

….

public Movie getMovie () { return movie; }

public int computeDays () { …..return days; }

public int getCost () { return movie.getCost(days); }

}


  • Login