Figure 3 (a) sketches the way protocol objects and algorithm objects interact. On the left side, protocol object a Object offers the services it inherits from its superclasses, as well as the new services that are specific to protocol . The actual algorithm implementing protocol is not part of a Object's code: instead, the latter uses services provided by strategy a Algo (on the right side of Figure 3 (a)). Whenever an operation related to protocol is invoked on a Object, the execution of the protocol is delegated to strategy a Algo. In turn, the services required by the strategy to run protocol are based on the inherited services of context a Object. Such required services merely identify entry point operations to underlying protocols needed to solve problem .
Figure 3: Strategy pattern in BAST
Each instance of class Algo represents one execution of protocol implemented by that class, and holds a reference to the context object for which it is running; any call to the services required by the strategy will be issued to its context object. There might be more than one instance of the same ProtoAlgo's subclass used simultaneously by a Object. At runtime, the latter maintains a table of all strategies that are currently in execution for it. Each message is tagged to enable a Object to identify in which execution of what protocol that message is involved, and to dispatch it to the right strategy. Figure 3 (b) presents the relationship between classes Object and Algo, using a class diagram based on the Object Modeling Technique notation [19]. The correspondence between Algo strategy objects and layered protocol stacks is pictured in Figure 3 (c): at runtime, each strategy object represents a layer in one of the protocol stacks currently in execution.