SlideShare ist ein Scribd-Unternehmen logo
1 von 18
Chapter 8: The Template
Method Pattern
StarBuzz
• Coffee Recipe
– Boil some water
– Brew coffee in boiling water
– Pour coffee in cup
– Add sugar and milk
• Tea Recipe
– Boil some water
– Steep tea in boiling water
– Pour tea in cup
– Add lemon
• Suppose you are required to implement a system to
maintain this
Problems with the Solution
• Code is duplicated across the classes – code
changes would have to be made in more than
one place.
• Adding a new beverage would result in further
duplication.
• Knowledge of the algorithm and
implementation is distributed over classes.
More General Approach
• Both subclasses inherit a general algorithm.
• Some methods in the algorithm are concrete,
i.e. methods that perform the same actions
for all subclasses.
• Other methods in the algorithm are abstract,
i.e. methods that perform class-specific
actions.
Class Diagram for the New
Approach
Caffeine Beverage
{Abstract}
boilWater()
pourInCup()
prepareRecipe()
NewTea
brewCoffeeGrinds()
addSugarAndMilk()
NewCoffee
steepTeaBag()
addLemon()
prepareRecipe() prepareRecipe()
Abstracting Prepare Recipe
Caffeine Beverage
{Abstract}
boilWater()
brew()
pourInCup()
addCondiments()
prepareRecipe()
NewTea
brew()
addCondiments()
NewCoffee
brew()
addCondiments()
Advantages of the New Approach
• A single class protects and controls the
algorithm, namely, CaffeineBeverage.
• The superclass facilitates reuse of methods.
• Code changes will occur in only one place.
• Other beverages can be easily added.
This is the Template Pattern
• The prepareRecipe() method implements the template
pattern.
• This method serves as a template for an algorithm,
namely that for making a caffeinated beverage.
• In the template each step is represented by a method.
• Some methods are implemented in the superclass.
• Other method must be implemented by the subclass
and are declared abstract.
• The template pattern defines the steps of an algorithm
and allows the subclasses to implement one or more
of the steps.
Template Pattern
• Encapsulates an algorithm by creating a template
for it.
• Defines the skeleton of an algorithm as a set of
steps.
• Some methods of the algorithm have to be
implemented by the subclasses – these are
abstract methods in the super class.
• The subclasses can redefine certain steps of the
algorithm without changing the algorithm’s
structure.
• Some steps of the algorithm are concrete
methods defined in the super class.
Template Pattern Structure
AbstractClass
primitiveOperation1()
...
primitiveOperationN()
templateMethod()
ConcreteClass
primitiveOperation1()
...
...
primitiveOperationN()
concreteOperations
Code for the Template
public abstract class AbstractClass
{
final void templateMethod()
{
primitiveOperation1();
primitiveOperation2();
concreteOperation();
}
abstract void primitiveOperation1();
abstract void primitiveOperation2();
void concreteOperation()
{
//Implementation
}
}
Using Hooks
• We want to minimize the number of abstract
methods used.
• Thus, the steps of the algorithm should not be
too granular.
• However, less granularity means less flexibility.
• Hooks are methods which can be overridden by
subclasses, however this is optional.
• Example: Suppose the customer is given an
option as to whether they would like condiments
or not.
Why Hooks
• The number of abstract methods used must
be minimized.
• Enables a subclass to implement an optional
part of an algorithm.
• Enables a subclass to react to a step in the
template method.
• Enables the subclass to make a decision for
the abstract class.
Examples of Using Hooks in the Java
API
• JFrame hooks
– paint()
• Applet hooks
– init()
– repaint()
– start()
– stop()
– destroy()
– paint()
Hollywood Principle
• The template pattern follows the hollywood
principle.
• Principle: Don’t call us, we will call you.
• Low-level components are activated by high-level
components.
• A low-level component never calls a high-level
component.
• In the template pattern the abstract class is the
high-level component and the concrete classes
the low-level components.
Sorting Using the Template Pattern
• Java’s Array class provides a template method for sorting.
• The sort is a merge sort and requires a method compareTo().
• Code:
public static void sort(Object a[]){
Object aux[] = (Object a[])a.clone);
mergeSort(aux,a,0,a.length,0);
}
private static void mergeSort(Object src[], Object dest[], int low,int
high, int off)
{
for(int i=low; i < high; ++i){
for(int j=i; j < low; &&
((Comparable)dest[j-1).compareTo((Comparable)dest[j])>0;j--)
{
swap(dest, j, j-1);
}
}
return;
}
Sorting Ducks
• The Duck class must implement the
Comparable interface.
• The Duck class must implement a
compareTo() method.
• Store the Duck instances in an array.
• Use the Array class sort to sort the array.
In Summary…
• Design Principle: Don’t call us we’ll call you.
• Template pattern defines steps of an
algorithm.
• Subclasses cannot change the algorithm - final
• Facilitates code reuse.
• Similar to the strategy pattern.
• The factory pattern is a specialization of the
template pattern.

Weitere ähnliche Inhalte

Was ist angesagt?

Chapter 05 polymorphism extra
Chapter 05 polymorphism extraChapter 05 polymorphism extra
Chapter 05 polymorphism extra
Nurhanna Aziz
 
Java findamentals2
Java findamentals2Java findamentals2
Java findamentals2
Todor Kolev
 

Was ist angesagt? (16)

Behavioral design patterns presentation
Behavioral design patterns presentationBehavioral design patterns presentation
Behavioral design patterns presentation
 
Factory Design Pattern
Factory Design PatternFactory Design Pattern
Factory Design Pattern
 
Analysis of a basic java program
Analysis of a basic java programAnalysis of a basic java program
Analysis of a basic java program
 
Command Pattern in Ruby
Command Pattern in RubyCommand Pattern in Ruby
Command Pattern in Ruby
 
Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)Design pattern (Abstract Factory & Singleton)
Design pattern (Abstract Factory & Singleton)
 
Factory Method Design Pattern
Factory Method Design PatternFactory Method Design Pattern
Factory Method Design Pattern
 
RapidMiner: Advanced Processes And Operators
RapidMiner:  Advanced Processes And OperatorsRapidMiner:  Advanced Processes And Operators
RapidMiner: Advanced Processes And Operators
 
ASM Core API - methods (part 1)
ASM Core API - methods (part 1)ASM Core API - methods (part 1)
ASM Core API - methods (part 1)
 
01 introduction to struts2
01 introduction to struts201 introduction to struts2
01 introduction to struts2
 
Factory Design Pattern
Factory Design PatternFactory Design Pattern
Factory Design Pattern
 
Chapter 05 polymorphism extra
Chapter 05 polymorphism extraChapter 05 polymorphism extra
Chapter 05 polymorphism extra
 
How to test models using php unit testing framework?
How to test models using php unit testing framework?How to test models using php unit testing framework?
How to test models using php unit testing framework?
 
OOP with Java - Abstract Classes and Interfaces
OOP with Java - Abstract Classes and InterfacesOOP with Java - Abstract Classes and Interfaces
OOP with Java - Abstract Classes and Interfaces
 
Struts2
Struts2Struts2
Struts2
 
Java findamentals2
Java findamentals2Java findamentals2
Java findamentals2
 
Exception Handling in C#
Exception Handling in C#Exception Handling in C#
Exception Handling in C#
 

Ähnlich wie Chapter8

Java tutorials
Java tutorialsJava tutorials
Java tutorials
saryu2011
 
Md06 advance class features
Md06 advance class featuresMd06 advance class features
Md06 advance class features
Rakesh Madugula
 

Ähnlich wie Chapter8 (20)

Design p atterns
Design p atternsDesign p atterns
Design p atterns
 
Lambdas in Java 8
Lambdas in Java 8Lambdas in Java 8
Lambdas in Java 8
 
METHODS IN JAVA.ppt
METHODS IN  JAVA.pptMETHODS IN  JAVA.ppt
METHODS IN JAVA.ppt
 
Introduction to c first week slides
Introduction to c first week slidesIntroduction to c first week slides
Introduction to c first week slides
 
Concurrency Programming in Java - 02 - Essentials of Java Part 1
Concurrency Programming in Java - 02 - Essentials of Java Part 1Concurrency Programming in Java - 02 - Essentials of Java Part 1
Concurrency Programming in Java - 02 - Essentials of Java Part 1
 
Design Patterns - GOF
Design Patterns - GOFDesign Patterns - GOF
Design Patterns - GOF
 
Ch5 inheritance
Ch5 inheritanceCh5 inheritance
Ch5 inheritance
 
StackNet Meta-Modelling framework
StackNet Meta-Modelling frameworkStackNet Meta-Modelling framework
StackNet Meta-Modelling framework
 
Synapseindia reviews.odp.
Synapseindia reviews.odp.Synapseindia reviews.odp.
Synapseindia reviews.odp.
 
Abstraction in java.pptx
Abstraction in java.pptxAbstraction in java.pptx
Abstraction in java.pptx
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Few minutes To better Code - Refactoring
Few minutes To better Code - RefactoringFew minutes To better Code - Refactoring
Few minutes To better Code - Refactoring
 
template method.pptx
template method.pptxtemplate method.pptx
template method.pptx
 
The maze of Design Patterns & SOLID Principles
The maze of Design Patterns & SOLID PrinciplesThe maze of Design Patterns & SOLID Principles
The maze of Design Patterns & SOLID Principles
 
Java tutorials
Java tutorialsJava tutorials
Java tutorials
 
Md06 advance class features
Md06 advance class featuresMd06 advance class features
Md06 advance class features
 
Super Keyword in Java.pptx
Super Keyword in Java.pptxSuper Keyword in Java.pptx
Super Keyword in Java.pptx
 
Design Patterns
Design PatternsDesign Patterns
Design Patterns
 
class as the basis.pptx
class as the basis.pptxclass as the basis.pptx
class as the basis.pptx
 
Java For beginners and CSIT and IT students
Java  For beginners and CSIT and IT studentsJava  For beginners and CSIT and IT students
Java For beginners and CSIT and IT students
 

Kürzlich hochgeladen

Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
WSO2
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
?#DUbAI#??##{{(☎️+971_581248768%)**%*]'#abortion pills for sale in dubai@
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
panagenda
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Victor Rentea
 

Kürzlich hochgeladen (20)

TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Corporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptxCorporate and higher education May webinar.pptx
Corporate and higher education May webinar.pptx
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Platformless Horizons for Digital Adaptability
Platformless Horizons for Digital AdaptabilityPlatformless Horizons for Digital Adaptability
Platformless Horizons for Digital Adaptability
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
WSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering DevelopersWSO2's API Vision: Unifying Control, Empowering Developers
WSO2's API Vision: Unifying Control, Empowering Developers
 
How to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected WorkerHow to Troubleshoot Apps for the Modern Connected Worker
How to Troubleshoot Apps for the Modern Connected Worker
 
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot ModelMcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
Mcleodganj Call Girls 🥰 8617370543 Service Offer VIP Hot Model
 
FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024FWD Group - Insurer Innovation Award 2024
FWD Group - Insurer Innovation Award 2024
 
Architecting Cloud Native Applications
Architecting Cloud Native ApplicationsArchitecting Cloud Native Applications
Architecting Cloud Native Applications
 
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
Apidays New York 2024 - The Good, the Bad and the Governed by David O'Neill, ...
 
Why Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire businessWhy Teams call analytics are critical to your entire business
Why Teams call analytics are critical to your entire business
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
Navigating the Deluge_ Dubai Floods and the Resilience of Dubai International...
 
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin WoodPolkadot JAM Slides - Token2049 - By Dr. Gavin Wood
Polkadot JAM Slides - Token2049 - By Dr. Gavin Wood
 
Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..Understanding the FAA Part 107 License ..
Understanding the FAA Part 107 License ..
 

Chapter8

  • 1. Chapter 8: The Template Method Pattern
  • 2. StarBuzz • Coffee Recipe – Boil some water – Brew coffee in boiling water – Pour coffee in cup – Add sugar and milk • Tea Recipe – Boil some water – Steep tea in boiling water – Pour tea in cup – Add lemon • Suppose you are required to implement a system to maintain this
  • 3. Problems with the Solution • Code is duplicated across the classes – code changes would have to be made in more than one place. • Adding a new beverage would result in further duplication. • Knowledge of the algorithm and implementation is distributed over classes.
  • 4. More General Approach • Both subclasses inherit a general algorithm. • Some methods in the algorithm are concrete, i.e. methods that perform the same actions for all subclasses. • Other methods in the algorithm are abstract, i.e. methods that perform class-specific actions.
  • 5. Class Diagram for the New Approach Caffeine Beverage {Abstract} boilWater() pourInCup() prepareRecipe() NewTea brewCoffeeGrinds() addSugarAndMilk() NewCoffee steepTeaBag() addLemon() prepareRecipe() prepareRecipe()
  • 6. Abstracting Prepare Recipe Caffeine Beverage {Abstract} boilWater() brew() pourInCup() addCondiments() prepareRecipe() NewTea brew() addCondiments() NewCoffee brew() addCondiments()
  • 7. Advantages of the New Approach • A single class protects and controls the algorithm, namely, CaffeineBeverage. • The superclass facilitates reuse of methods. • Code changes will occur in only one place. • Other beverages can be easily added.
  • 8. This is the Template Pattern • The prepareRecipe() method implements the template pattern. • This method serves as a template for an algorithm, namely that for making a caffeinated beverage. • In the template each step is represented by a method. • Some methods are implemented in the superclass. • Other method must be implemented by the subclass and are declared abstract. • The template pattern defines the steps of an algorithm and allows the subclasses to implement one or more of the steps.
  • 9. Template Pattern • Encapsulates an algorithm by creating a template for it. • Defines the skeleton of an algorithm as a set of steps. • Some methods of the algorithm have to be implemented by the subclasses – these are abstract methods in the super class. • The subclasses can redefine certain steps of the algorithm without changing the algorithm’s structure. • Some steps of the algorithm are concrete methods defined in the super class.
  • 11. Code for the Template public abstract class AbstractClass { final void templateMethod() { primitiveOperation1(); primitiveOperation2(); concreteOperation(); } abstract void primitiveOperation1(); abstract void primitiveOperation2(); void concreteOperation() { //Implementation } }
  • 12. Using Hooks • We want to minimize the number of abstract methods used. • Thus, the steps of the algorithm should not be too granular. • However, less granularity means less flexibility. • Hooks are methods which can be overridden by subclasses, however this is optional. • Example: Suppose the customer is given an option as to whether they would like condiments or not.
  • 13. Why Hooks • The number of abstract methods used must be minimized. • Enables a subclass to implement an optional part of an algorithm. • Enables a subclass to react to a step in the template method. • Enables the subclass to make a decision for the abstract class.
  • 14. Examples of Using Hooks in the Java API • JFrame hooks – paint() • Applet hooks – init() – repaint() – start() – stop() – destroy() – paint()
  • 15. Hollywood Principle • The template pattern follows the hollywood principle. • Principle: Don’t call us, we will call you. • Low-level components are activated by high-level components. • A low-level component never calls a high-level component. • In the template pattern the abstract class is the high-level component and the concrete classes the low-level components.
  • 16. Sorting Using the Template Pattern • Java’s Array class provides a template method for sorting. • The sort is a merge sort and requires a method compareTo(). • Code: public static void sort(Object a[]){ Object aux[] = (Object a[])a.clone); mergeSort(aux,a,0,a.length,0); } private static void mergeSort(Object src[], Object dest[], int low,int high, int off) { for(int i=low; i < high; ++i){ for(int j=i; j < low; && ((Comparable)dest[j-1).compareTo((Comparable)dest[j])>0;j--) { swap(dest, j, j-1); } } return; }
  • 17. Sorting Ducks • The Duck class must implement the Comparable interface. • The Duck class must implement a compareTo() method. • Store the Duck instances in an array. • Use the Array class sort to sort the array.
  • 18. In Summary… • Design Principle: Don’t call us we’ll call you. • Template pattern defines steps of an algorithm. • Subclasses cannot change the algorithm - final • Facilitates code reuse. • Similar to the strategy pattern. • The factory pattern is a specialization of the template pattern.