The separation is accomplished through the creation of two abstract classes: a decorator (for logic), and a delegate (for implementation).
The Factory handles the mapping of decorator and delegate classes and returns the pair associated with a parameter or parameters passed.
The interface is the contract between a decorator, a delegate, and the calling class, creating an Inversion of Responsibility.
Delegate The descendants of the delegate flow class handle the implementation for call a sub-system, storage, or communication.
Different children can use completely different sub-systems storage, or communications than each other.