My Answer (I have not tried it, but believe it should work.)
1. Create an interface SortAlgorithm containing sort (List
2. Publish its source and .class file.
3. Design a table SortAlgorithms with two columns algo_name and class_name.
4. Provide a UI for 3rd party vendors to upload their concrete implementation for SortAlgorithm.
5. Put the .class file of 4 in class-path and create an entry in the table.
6. Your UI would start listing the new algorithm picked up from the same table.
7. If user chooses new algorithm, load its corresponding class with its name in that table.
8. Your code was always using SortAlgorithm interface so it never needed changes.
Does this approach makes sense to add new behaviors in the system?