In languages like Java or Smalltalk, function objects are easy to
create. You can use them to encode stateful behavior. This
is a variant on
ObjectsForState [
StatePattern ?].
--
AamodSane
Suppose you have file browser with a "More" button.
When it comes up, it shows only "html" files. Next time
it shows ".img" files as well. Finally, it goes deeper down
the directory tree. (Yes, its a bit contrived :-).
One way to program this would be to keep several
variables for file types, a "times" variable etc. and use
nested ifs to do the right thing.
But this can quickly get out of hand.
Instead, keep a list of "whatNext" functions that
holds function objects. Functions in the list are
invoked one by one, and then it "wraps around".
In the above example, whatNext is ShowHTML
followed by ShowIMG followed by
ShowDirectories.
Maintaining a list or tree explicitly, with a policy
for choosing what next separates out the
choice of what to do next from the functions themselves.
This can be clearer than using
ObjectForState [
StatePattern ?], where the state
itself chooses what to do next.