作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
假设您有两个函数 fun1
和 fun2
。有两个类 der1
和 der2
。 der1
和der2
都实现了fun1
,但只有der2
实现了fun2
。但是我需要具有指向 der1
和 der2
的 base
指针的多态行为。即使只有 der2
会同时使用这两个函数,在基类(抽象)中同时拥有这两个函数是否有意义?
der1
和der2
是相关的,我认为der2
应该包含der1
。但即便如此,基类仍需要声明 fun1
和 fun2
。我如何实现ISP?下面的代码看起来不错还是有更好的方法来重组它?
class base // Abstract
{
public:
virtual void fun1() {//default implementation}
void fun2(){ // used by only der2}
};
class der1 : public base
{
//this also have fun2 as its defined in base.
}
class der2 : public base
{
// should implement fun1 and fun2 both
public:
void fun2() { //implements fun2.}
}
最佳答案
接口(interface)隔离原则解决了客户端函数或类仅使用它们所依赖的接口(interface)中所有方法的子集的问题。例如,想象一下以下情况:
在这种情况下,两个“Client”类都依赖于整个“BigInterface”API,而它们实际上只需要一部分方法。在这种情况下,最简单的解决方案是“拆分”大界面并创建有凝聚力的界面,例如:
在您的特定情况下,这取决于谁使用 der1
、der2
和 base
。在没有更多上下文信息的情况下很难知道您的代码看起来不错,但是假设您的客户端类依赖于base
,即使它们只需要 fun1
或 fun2
,您应该应用与示例中类似的配方并将您的界面一分为二。
希望对你有帮助:)
关于c++ - 如何用多态行为实现接口(interface)隔离c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29078288/
我是一名优秀的程序员,十分优秀!