Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

Implementation selection for Context.

module m {
define class C {
define void contextInterface() {
... algorithmInterface() ...
}
define abstract void algorithmInterface();
}
}
module m.strategyA extends m {
class C { void algorithmInterface() {...} }
}
module m.strategyB extends m {
class C { void algorithmInterface() {...} }
}