Package org.refcodes.command

This package provides means to implement your custom commands as of the command pattern:

"... (in) the command pattern ... an object is used to represent and encapsulate all the information needed to call a method at a later time. This ... includes the ... method parameters ..." [Command pattern, see (Wikipedia)]

A command can be seen as a method and its context (variables1) all transformed to an object (e.g a method turned inside out).

Given you define a command's interface with an “execute” and an “undo” method and you strictly make use of commands: Then you easily can provide undo functionality by putting your executed commands onto a stack ...


A Command (respectively an Undoable) represents an (atomic) operation applied to a context encapsulated in an object (as of object oriented programming). Usually a command (Undoable) also provides means to undo its operation applied before. The Command (Undoable) is created by a client (e.g. the business logic) and passed e.g. to a command bus for execution (or executed "manually" at required / desired time). (a command bus implementation you can find in the "refcodes-jobbus" artifact, see org.refcodes.jobbus.JobBus).


The client may be the business logic creating a Undoable (job) to be executed.


The context can be a service, a service-bus (providing a handful of services), a component or a plain POJO (this depends on your requirements and your implementation).