I — Interface Segregation Principle: müştəri istifadə etmədiyi metodlardan asılı olmamalıdır. Bir böyük ("qalın") interfeys əvəzinə bir neçə kiçik, rola görə interfeys yazılır. Hər sinif yalnız bacardığı rolları həyata keçirir, hər müştəri yalnız lazım olan rolu tələb edir.

Pozuntu: qalın interfeys

Machine üç əməliyyat tələb edir. Çoxfunksiyalı qurğu hamısını bacarır, köhnə printer isə yalnız çap edir, amma scan və fax yazmağa məcburdur. Adətən belə sinif raise NotImplementedError yazır və müştəri scan() çağıranda yıxılır.

Solda qalın `Machine`, sağda üç rol interfeysi
Solda qalın Machine, sağda üç rol interfeysi
python
from abc import ABC, abstractmethod

class Machine(ABC):                        # a fat interface
    @abstractmethod
    def print_doc(self, doc): ...

    @abstractmethod
    def scan(self): ...

    @abstractmethod
    def fax(self, doc): ...

class MultiFunction(Machine):
    def print_doc(self, doc):
        return f"print {doc}"

    def scan(self):
        return "scan"

    def fax(self, doc):
        return f"fax {doc}"

class OldPrinter(Machine):                 # forced to implement what it cannot do
    def print_doc(self, doc):
        return f"print {doc}"

    def scan(self):
        raise NotImplementedError("no scanner")