package demo;
/**
* 2. Template mode
* Two roles:
* 1. Abstract template
* 1. Abstract method: need to be implemented by subclasses, and subclasses must implement
* 2. Callback method: extension method, which is an empty method , subclasses can be overridden or not
* 3. Private final method: not overridable
* 4. Template method: This method defines the execution order and logic of each method
* 2. Concrete
* needs to implement abstraction Abstract method in template
*
*
*/
abstract class ConcreteTemplate {
/**
* Template method
*/
public void templateMethod(){
//Call the basic method
abstractMethod();
hookMethod();
concreteMethod();
}
/**
* Basic method declaration (implemented by subclasses)
*/
protected abstract void abstractMethod();
/**
* Basic method (empty method)
*/
protected void hookMethod(){}
/**
* Basic method (already implemented)
* /
private final void concreteMethod(){
//business-related code
}
}
public class ConcreteTemplate extends ConcreteTemplate{
//basic method implementation
@Override
public void abstractMethod() {
//business-related code
}
//override parent class Method
@Override
public void hookMethod() {
//Business related code
}
}
/**
* 2. Template mode
* Two roles:
* 1. Abstract template
* 1. Abstract method: need to be implemented by subclasses, and subclasses must implement
* 2. Callback method: extension method, which is an empty method , subclasses can be overridden or not
* 3. Private final method: not overridable
* 4. Template method: This method defines the execution order and logic of each method
* 2. Concrete
* needs to implement abstraction Abstract method in template
*
*
*/
abstract class ConcreteTemplate {
/**
* Template method
*/
public void templateMethod(){
//Call the basic method
abstractMethod();
hookMethod();
concreteMethod();
}
/**
* Basic method declaration (implemented by subclasses)
*/
protected abstract void abstractMethod();
/**
* Basic method (empty method)
*/
protected void hookMethod(){}
/**
* Basic method (already implemented)
* /
private final void concreteMethod(){
//business-related code
}
}
public class ConcreteTemplate extends ConcreteTemplate{
//basic method implementation
@Override
public void abstractMethod() {
//business-related code
}
//override parent class Method
@Override
public void hookMethod() {
//Business related code
}
}