一天学习一个设计模式-接口隔离原则

111 阅读2分钟

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