Concept · Core

Interface Segregation (I)

No client should be forced to depend on methods it doesn’t use. Prefer many small, role-specific interfaces over one fat one.

Asked atAmazonGoogleMicrosoft
step 1 / 8
1/2The fat interface
«interface»
Worker
+ work()
+ eat()
+ sleep()
HumanWorker
+ work()
+ eat()
+ sleep()
RobotWorker
+ work()
+ eat() ✗
+ sleep() ✗
The fat interface
1interface Worker {
2 void work();
3 void eat();
4 void sleep();
5}
6class HumanWorker implements Worker { ... }
7class RobotWorker implements Worker {
8 public void work() { /* real */ }
9 public void eat() { throw new UnsupportedOperationException(); }
10 public void sleep() { throw new UnsupportedOperationException(); }
11}
State
Workerwork + eat + sleep

Start with ONE big Worker interface bundling three capabilities together: work() + eat() + sleep(). Every implementer must supply all three.