Enjoyed reading the article, and enjoyed examing my code with JDepend :)
One small point, why add IF onto the end of an interface name? A better solution would be to rename the concrete class, e.g. ServiceLocatorImpl, StateMachineImpl, and use the 'pure' names for the interfaces, e.g. ServiceLocator, StateMachine. Hence existing client code won't need to be changed, and new client code can use the 'pure' name and not a name with some prefex/prefix (Impl, IF, I, whatever).
Thanks for the article,