Additional composite command design patterns
We can identify a number of composite design patterns. In the previous example, we designed a sequence composite. For inspiration, we can look at the bash shell composite operators: ;
, &
, |
, as well as ()
for grouping. Beyond these, we have if
, for
, and while
loops within the shell.
We looked at the sequence operator (;
) in the Command_Sequence
class definition. This concept of sequence is so ubiquitous that many programming languages (such as the shell and Python) don't require an explicit operator; the syntax simply uses end-of-line as an implied sequence operator.
The shell's &
operator creates two commands that run concurrently instead of sequentially. We can create a Command_Concurrent
class definition with a run()
method that uses multiprocessing
to create two subprocesses and waits for both to finish.
The |
operator in the shell creates a pipeline: one command's output buffer is another command's input buffer; the commands run concurrently...