1 / 13

Design Patterns

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.

tosca
Télécharger la présentation

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. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Design Patterns

  2. 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

  3. 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

  4. 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; }……..

  5. 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

  6. 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

  7. 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) ……..

  8. 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

  9. 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.

  10. 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……

  11. 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; } } …..

  12. 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); } }

  13. 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); } }

More Related