#4实体 - 接口隔离原理| Swift | iOS开发
#面试 #ios #swift #softwareengineering

在以下示例中,我们定义了一个PrinterProtocol,我们可以使用该PrinterProtocol来创建多种打印机。

我们在一个协议中添加了所有方法。因此,即使我们想创建一个简单的打印机,我们也必须在协议中实现每个功能。我们可以为协议提供默认的埋葬,但仍然违反了ISP,因为SimplePrinter也可以调用默认实现。那不是预期的行为。 SimplePrinter不必调用receiveFax()方法。

protocol PrinterProtocol {
    func printDocument()
    func scanDocument()
    func sendFax()
    func receiveFax()
}

extension PrinterProtocol {
    func receiveFax() {
        print("Default: Receiving fax...")
    }
}

class SimplePrinter: PrinterProtocol {
    func printDocument() {
        print("Printing document...")
    }

    func scanDocument() {
        print("Scanning document...")
    }

    func sendFax() {
        print("Sending fax...")
    }

    func receiveFax() {
        print("Receiving fax...")
    }
}

让我们检查一下如何根据ISPð

实现
  • 不应强迫客户依靠他们不使用的接口。
  • 较大的通用接口应隔离为较小,更具体的接口,这些接口是根据单个客户的需求量身定制的。
  • 目标是避免需要客户实施与用例无关的方法的情况。
  • 这促进了软件系统中的模块化,可维护性,灵活性和可检验性。

protocol Printer {
    func printDocument()
}

protocol Scanner {
    func scanDocument()
}

protocol FaxMachine {
    func sendFax()
    func receiveFax()
}

class AllInOnePrinter: Printer, Scanner, FaxMachine {
    func printDocument() {
        print("Printing document...")
    }

    func scanDocument() {
        print("Scanning document...")
    }

    func sendFax() {
        print("Sending fax...")
    }

    func receiveFax() {
        print("Receiving fax...")
    }
}

class SimplePrinter: Printer {
    func printDocument() {
        print("Printing document...")
    }
}