It mainly depends on personal choice.
However, one advantage that a class function provides is a means of faking namespaces. Suppose that the name of the function you wanted to use was quite short and generic. In this situation, he may encounter another character with the same name defined in another block. At this point, you may be confronted with the vagaries of how to use the unit and may need to fully qualify the name. Using a class function, you force the user to qualify the function name in its class.
Another point to be made is that the two alternatives that you present have a potentially significant difference. The class function in your question has a Self pointer. Unlike the instance method, this refers to the class, not the instance. To make two functions completely equivalent, you must declare a function of the static class.
class function SomeFunction(sMyString: string): ISomeInterface; static;
Of course, one thing that can be done with a non-static class function is that it can be used where the type of of method is required.
source share