接口隔离原则
客户端不应该被迫依赖于它不使用的方法;一个类对另一个类的依赖应该建立在最小的接口上。
上图理解一下吧!
【例】安全门案例 我们需要创建:
一个阿卿品牌的安全门,该安全门具有防火、防水、防盗的功能。可以将防火,防水,防盗功能提取成一个接口,形成一套规范。
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()
我们可以看到阿卿品牌的安全门已经拥有了防火防盗防水的功能了,但是如果有些消费者觉的我的门只需要防火防盗功能就好了,厂商为了配合消费者也想生产一款只有防火防盗功能的安全门,由于接口标准是一整套的规则,我们很难自由选择自己需要的功能来生产安全门,为了能让产商拥有自由选择权,我们要对代码进行改进:
//防盗接口
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()
运行结果
现在产商可以自由创建各种组合功能的安全门了,需要生产什么功能的安全门,只要实现对应的接口就可以了。
感谢黑马程序员课程