Use the command pattern when you need to decouple the object making the request from the object executing the request.
Code:
// request caller public class CommandMain { Command command; public void setCommand(Command command) { this.command = command; } public void execute(){ command.execute(); } } //command object public class LightCommand implements Command{ private Light light; public LightCommand(Light light){ this.light = light; } @Override public void execute() { light.on(); } }