接口隔离原则
约 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/3/6 03:19
查看所有更新日志
79076
-improve(docs): use chinese punctuation于42218
-fix(docs): text typo于1289a
-improve(docs): delete extra whitespace and blank lines于c2111
-modify(docs): remanage folders and rename files于aae8b
-docs: update docs于20068
-整理设计原则整个部分于f5cf9
-设计模式改为设计原则于f86ee
-update于93933
-新增文字+CRLF全部替换为LF于fb196
-升级版本+规整文档中的格式于