软件设计原则-接口隔离原则

142 阅读1分钟

接口隔离原则

客户端不应该被迫依赖于它不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上。

上图理解一下吧!

image-20220910083310027

【例】安全门案例 我们需要创建:

一个阿卿品牌的安全门,该安全门具有防火、防水、防盗的功能。可以将防火,防水,防盗功能提取成一个接口,形成一套规范。

​ import Foundation //安全门接口 protocol SafetyDoor{ //   防盗功能    func antiTheft() //   防水功能    func waterProof() //   防火功能    func fireProof() } //阿卿品牌的安全门 class AqingSafetyDoor:SafetyDoor{    func antiTheft() {        print("防盗功能")    }        func waterProof() {        print("防水功能")    }        func fireProof() {        print("防火功能")    } } ​

测试代码

var aqingDoor = AqingSafetyDoor()
aqingDoor.antiTheft()
aqingDoor.waterProof()
aqingDoor.fireProof()

image-20220910084242421

我们可以看到阿卿品牌的安全门已经拥有了防火防盗防水的功能了,但是如果有些消费者觉的我的门只需要防火防盗功能就好了,厂商为了配合消费者也想生产一款只有防火防盗功能的安全门,由于接口标准是一整套的规则,我们很难自由选择自己需要的功能来生产安全门,为了能让产商拥有自由选择权,我们要对代码进行改进:

//防盗接口
protocol AntiTheft{
//    防盗功能
    func antiTheft()
}
//防水接口
protocol WaterProof{
//    防水功能
    func waterProof()
}
//防火接口
protocol FireProof{
    func fireProof()
}
//阿卿品牌的安全门
class AqingSafetyDoor:AntiTheft,FireProof{
    func antiTheft() {
        print("防盗功能")
    }
    func fireProof() {
        print("防火功能")
    }
}
​

测试代码

var aqingDoor = AqingSafetyDoor()
aqingDoor.antiTheft()
aqingDoor.fireProof()
​

运行结果

image-20220910084938624

现在产商可以自由创建各种组合功能的安全门了,需要生产什么功能的安全门,只要实现对应的接口就可以了。

感谢黑马程序员课程