接口隔离原则
约 527 字大约 2 分钟
2022-04-28
定义
接口隔离原则 ( ISP ) 。
Clients should not be forced to depend upon interfaces that they do not use.
客户端不应该被强迫依赖它不需要的接口。
示例
假设有一个门,可以开锁和解锁。除此之外还可以额外安装警铃。客户可以自主选择使用一般的门还是有警铃的门。
反例
Door.h
class Door {
public:
virtual void unlock ( ) = 0;// 解锁
virtual void lock ( ) = 0;// 上锁
virtual void installAlarm ( ) = 0;// 安装警铃
virtual void ringAlarm ( ) = 0;// 警铃响起
};
SimpleDoor.h
class SimpleDoor : public Door {
public:
void unlock ( ) override {
// 解锁
}
void lock ( ) override {
// 上锁
}
void installAlarm ( ) override {
// 不需要警铃功能
// 这里的实现可能抛出异常或者做某种标记, 表示这个功能不适用
throw std:: logic_error ( "Alarm not supported" ) ;
}
void ringAlarm ( ) override {
// 不需要警铃功能
throw std:: logic_error ( "Alarm not supported" ) ;
}
};
DoorWithAlarm.h
class DoorWithAlarm : public Door {
public:
void unlock ( ) override {
// 解锁
}
void lock ( ) override {
// 上锁
}
void installAlarm ( ) override {
// 安装警铃
}
void ringAlarm ( ) override {
// 响起警铃
}
};
正例
Interface.cpp
class Lockable {
public:
virtual void unlock ( ) = 0; // 解锁
virtual void lock ( ) = 0; // 上锁
};
class Alarmable {
public:
virtual void installAlarm ( ) = 0; // 安装警铃
virtual void ringAlarm ( ) = 0; // 警铃响起
};
SimpleDoor.h
class SimpleDoor : public Lockable {
public:
void unlock ( ) override {
// 解锁
}
void lock ( ) override {
// 上锁
}
};
DoorWithAlarm.h
class DoorWithAlarm : public Lockable, public Alarmable {
public:
void unlock ( ) override {
// 解锁
}
void lock ( ) override {
// 上锁
}
void installAlarm ( ) override {
// 安装警铃
}
void ringAlarm ( ) override {
// 响起警铃
}
};
贡献者
更新日志
2025/8/5 08:34
查看所有更新日志
eb6eb
-improve(docs): use pangu formatter于dd170
-feat(docs): add solid principles series于f29bc
-improve(docs): use chinese punctuation于25255
-fix(docs): text typo于fea7c
-improve(docs): delete extra whitespace and blank lines于c1c02
-modify(docs): remanage folders and rename files于d5800
-docs: update docs于adccc
-整理设计原则整个部分于756e1
-设计模式改为设计原则于4e139
-update于