Если задуматься, то оба можно отнести к фабрикам, порождающим объекты, также у них общее - регистрация экземпляров, которые они могут предоставить. Отличие же в том, что Registry - более явный, т.к. при получении необходимого объекта явно понятно какой тип объектов может предоставить Registry. В ServiceLocator же своим интерфейсом не говорит, что в нем есть, в него можно зарегистрировать почти любой класс, и узнаешь ты это только в runtime. Эта неявность в большинстве случаев и делает этот паттерн антипаттерном.