c++ - 如何用多态行为实现接口(interface)隔离c++

标签 c++ oop interface

假设您有两个函数 fun1fun2。有两个类 der1der2der1der2都实现了fun1,但只有der2实现了fun2。但是我需要具有指向 der1der2base 指针的多态行为。即使只有 der2 会同时使用这两个函数,在基类(抽象)中同时拥有这两个函数是否有意义?

der1der2 是相关的,我认为der2 应该包含der1。但即便如此,基类仍需要声明 fun1fun2。我如何实现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)中所有方法的子集的问题。例如,想象一下以下情况:

enter image description here

在这种情况下,两个“Client”类都依赖于整个“BigInterface”API,而它们实际上只需要一部分方法。在这种情况下,最简单的解决方案是“拆分”大界面并创建有凝聚力的界面,例如:

enter image description here

在您的特定情况下,这取决于谁使用 der1der2base。在没有更多上下文信息的情况下很难知道您的代码看起来不错,但是假设您的客户端类依赖于base,即使它们只需要 fun1fun2,您应该应用与示例中类似的配方并将您的界面一分为二。

希望对你有帮助:)

关于c++ - 如何用多态行为实现接口(interface)隔离c++,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29078288/

相关文章:

c++ - 在 C++ 中从标量到非标量的转换

c++ - 具有 O(1) 性能的类似 STL 的容器

C# 接口(interface)类和对象依赖关系和设计问题(代码分离)

iphone - 伪私有(private)方法的实现文件中的方法原型(prototype)?

jquery - 向下滑动菜单,但不会移动其他所有内容

java - 在Netbeans中,有没有一种方法可以显示类中的所有公共(public)变量和方法,而无需实际生成接口(interface)文件?

c++ - 找到给定数量的素数

c++ - tictactoe 游戏没有运算符 "=="匹配这些操作数

c# - 关于多对多关系的OO问题(NHibernate的规划)

oop - UML 组合属性不是类中的特征?