 
                Metoda szablonowa w języku Rust
Metoda szablonowa to behawioralny wzorzec projektowy według którego definiuje się szkielet algorytmu w klasie bazowej i pozwala klasom pochodnym nadpisać poszczególne jego etapy bez zmiany ogólnej struktury.
Conceptual Example
main.rs
trait TemplateMethod {
    fn template_method(&self) {
        self.base_operation1();
        self.required_operations1();
        self.base_operation2();
        self.hook1();
        self.required_operations2();
        self.base_operation3();
        self.hook2();
    }
    fn base_operation1(&self) {
        println!("TemplateMethod says: I am doing the bulk of the work");
    }
    fn base_operation2(&self) {
        println!("TemplateMethod says: But I let subclasses override some operations");
    }
    fn base_operation3(&self) {
        println!("TemplateMethod says: But I am doing the bulk of the work anyway");
    }
    fn hook1(&self) {}
    fn hook2(&self) {}
    fn required_operations1(&self);
    fn required_operations2(&self);
}
struct ConcreteStruct1;
impl TemplateMethod for ConcreteStruct1 {
    fn required_operations1(&self) {
        println!("ConcreteStruct1 says: Implemented Operation1")
    }
    fn required_operations2(&self) {
        println!("ConcreteStruct1 says: Implemented Operation2")
    }
}
struct ConcreteStruct2;
impl TemplateMethod for ConcreteStruct2 {
    fn required_operations1(&self) {
        println!("ConcreteStruct2 says: Implemented Operation1")
    }
    fn required_operations2(&self) {
        println!("ConcreteStruct2 says: Implemented Operation2")
    }
}
fn client_code(concrete: impl TemplateMethod) {
    concrete.template_method()
}
fn main() {
    println!("Same client code can work with different concrete implementations:");
    client_code(ConcreteStruct1);
    println!();
    println!("Same client code can work with different concrete implementations:");
    client_code(ConcreteStruct2);
}
Output
Same client code can work with different concrete implementations: TemplateMethod says: I am doing the bulk of the work ConcreteStruct1 says: Implemented Operation1 TemplateMethod says: But I let subclasses override some operations ConcreteStruct1 says: Implemented Operation2 TemplateMethod says: But I am doing the bulk of the work anyway Same client code can work with different concrete implementations: TemplateMethod says: I am doing the bulk of the work ConcreteStruct2 says: Implemented Operation1 TemplateMethod says: But I let subclasses override some operations ConcreteStruct2 says: Implemented Operation2 TemplateMethod says: But I am doing the bulk of the work anyway