Strategy pattern solves the necessity of applying a certain algorithm/behaviour depending on the object's type itself. So you can iterate over a bunch of similar objects and call the same function expecting different algorithms to be executed for each one.
But what about two (or more) objects may have a special algorithm for them together? Only if they both are in our list to iterate. If not, they have their own single object behaviour.
We have different object types: Blue, Yellow and Red.
They all have their own
shine() method, which implements from its own strategy:
Then I have a combination of
Yellow objects. In order to make them shine, I'll do:
combination = [blueObject, yellowObject] for c in combination: c.shine()
That's okay. The problem comes when a restriction is added. If Red and Blue are present in the combination, I cannot call the shine method for everyone, I must use, just for those two, a
When is the time to ask and decide the use of the combined strategies? Is it in the moment of execution (the
Or should I decide this before? (considering I can model the combinations, I can have an array of "special groups" included in the model)