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 may or may not override
* 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{
//The implementation of the basic method
@Override
public void abstractMethod() {
//Business related code
}
//Override the method of the parent class
@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 may or may not override
* 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{
//The implementation of the basic method
@Override
public void abstractMethod() {
//Business related code
}
//Override the method of the parent class
@Override
public void hookMethod() {
// business related code
}
}