1. 定义:
客户端(调用者)不应该被强迫依赖它不需要的接口
2. 理解
接口:
一组 API 接口集合
单个 API 接口或函数
3. 用途
用途. 拆分庞大的接口为更小的更具体的接口,使其满足单一职责原则,系统解耦,便于以后拓展和重构
4. 示例:
如果把接口看做一组API
例如: 有用户服务 可以提供登录,注册 普通用户不能进行删除,管理员可以进行删除用户
class UserService(metaclass=ABCMeta):
@abstractmethod
def register(self, name, pwd):
pass
@abstractmethod
def login(self, name, pwd):
pass
@abstractmethod
def delete_by_id(self, u_id):
pass
class User(UserService):
def register(self, name, pwd):
pass
def login(self, name, pwd):
pass
def delete_by_id(self, u_id):
pass
以上问题:如果是普通用户 那么不同用户不具备删除功能,那么对于普通用户来说删除就是多余的接口
改写
class UserService(metaclass=ABCMeta):
@abstractmethod
def register(self, name, pwd):
pass
@abstractmethod
def login(self, name, pwd):
pass
class User(UserService):
def register(self, name, pwd):
pass
def login(self, name, pwd):
pass
class ManageService(UserService, metaclass=ABCMeta):
@abstractmethod
def delete_by_id(self, u_id):
pass
class ManageUser(ManageService):
def register(self, name, pwd):
pass
def login(self, name, pwd):
pass
def delete_by_id(self, u_id):
pass
满足接口隔离原则,不需要在方法里面进行赘余的判断,而是采用隔离原则去进行分割 方便重构
如果把接口看做一个函数
def operation(a: int, b: int, method):
if method == '+':
# 逻辑
return a + b
elif method == '-':
# 逻辑
return a - b
elif method == 'min':
# 逻辑
return min(a, b)
elif method == 'max':
# 逻辑
return max(a, b)
一个函数应当只做一件事,如果在内部加判断的话 以后条件越多 就有多个分支 代码不清晰 识别度不高 不利于重构
遵循接口单一原则
一个函数只做一件事
def add(a, b):
# 逻辑
return a + b
def subtract(a, b):
# 逻辑
return a - b