Вы можете использовать Java-интерфейсы и переопределять различные версии реализации в зависимости от ваших потребностей. Вы можете вызвать конкретную реализацию в зависимости от потребностей вашего клиента.
Example:
Interface A{
void showName();
}
class X implements A{
void showName(){
System.out.print("my name is X");
}
}
class Y implements A{
void showName(){
System.out.print("my name is Y");
}
}
Теперь, основываясь на потребностях вашего клиента, вы можете создать конкретный класс, который отвечает вашим требованиям. У вас может быть N реализаций для N клиентов.
class Test{
public static void main (String [] a){
/* For client X */
A a1 = new X();
a1.showName();
/* For client Y */
A a2 = new Y();
a2.showName();
}
}
P.S. Пожалуйста, обратите внимание на код, я написал его прямо в редакторе