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.
Machine, sağda üç rol interfeysifrom 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")