add Template Method pattern

This commit is contained in:
Jakub Vojvoda
2016-09-28 22:23:54 +02:00
parent a19f4f0ca2
commit 4aac94044c
2 changed files with 71 additions and 0 deletions

View File

@@ -0,0 +1,12 @@
## Template Method
Template method defines the skeleton of an algorithm in an operation, deferring some
steps to subclasses. It lets subclasses redefine certain steps of an algorithm
without changing the algorithm's structure. The pattern has behavioral purpose and
applies to the classes.
### When to use
* to implement the invariant parts of an algorithm once and leave it up to subclasses to implement the behavior that can vary
* when common behavior among subclasses should be factored and localizedin a common class to avoid code duplication
* to control subclasses extensions

View File

@@ -0,0 +1,59 @@
/*
* C++ Design Patterns: Template Method
* Author: Jakub Vojvoda [github.com/JakubVojvoda]
* 2016
*
* Source code is licensed under MIT License
* (for more details see LICENSE)
*
*/
#include <iostream>
/*
* AbstractClass
* implements a template method defining the skeleton of an algorithm
*/
class AbstractClass {
public:
void templateMethod() {
// ...
primitiveOperation1();
// ...
primitiveOperation2();
// ...
}
virtual void primitiveOperation1() = 0;
virtual void primitiveOperation2() = 0;
// ...
};
/*
* Concrete Class
* implements the primitive operations to carry out specific steps
* of the algorithm, there may be many Concrete classes, each implementing
* the full set of the required operation
*/
class ConcreteClass : public AbstractClass {
public:
void primitiveOperation1() {
std::cout << "Primitive operation 1" << std::endl;
// ...
}
void primitiveOperation2() {
std::cout << "Primitive operation 2" << std::endl;
// ...
}
// ...
};
int main()
{
AbstractClass *tm = new ConcreteClass;
tm->templateMethod();
return 0;
}