If you want to execute some commands only conditionally, you have to provide some code, which checks this (partially very complex) conditions in an structured, reusable and efficient manner.
To separate commands from their conditions.
For building a hierarchy of conditions, on which you can build new conditions for new commands.
For performance reason, so a condition is checked only once (if possible)
A condition belongs to a Command Factory, so every Command Factory knows, which conditions have to be true to create and execute the specific command. So if you want a button or menu to execute a command, you can ask its Command Factory, if it is suitable. According to the result you can show your button or menu in different states (e.g. greyed, unvisible or normal).
Conditions itself can be chained, which means, if you want an exisiting condition (e.g. a RFG is open) to be part of a new condition, you can chain it to your new condition with a logical condition (AND an OR), and include some new conditions.
For increasing the speed the results of a condition are chached in each condition.