class FooInterface {
virtual void Method1(bool method) = 0;
};
class BarClass1 : FooInterface {
void Method1(bool method) final {
if (method) {
Method2();
} else {
Method3();
}
}
void Method2() {// BarClass1 logic};
void Method3() {// BarClass1 logic};
};
class BarClass2 : FooInterface {
void Method1(bool method) final {
if (method) {
Method2();
} else {
Method3();
}
}
void Method2() {// BarClass2 logic};
void Method3() {// BarClass2 logic};
};
将通用逻辑移至 AbstractClass 是否有意义,或者是否有更优化的设计模式?
class FooAbstractClass : FooInterface {
void Method1(bool method) final {
if (method) {
Method2();
} else {
Method3();
}
}
virtual void Method2() = 0;
virtual void Method3() = 0;
};
class BarClass1 : FooAbstractClass {
void Method2() final {// BarClass1 logic};
void Method3() final {// BarClass1 logic};
};
class BarClass2 : FooAbstractClass {
void Method2() final {// BarClass2 logic};
void Method3() final {// BarClass2 logic};
};
预期用途:
BarClass1 bar1;
bar1.Method1(true);
BarClass2 bar2;
bar2.Method1(false);
一个可能的解决方法是为 Method2
和
Method3
函数提供 另一个接口类。然后创建一个
BarBase
类,它继承 both 接口,但也定义(实现)来自 Method1
的 FooInterface
。
然后两个
BarClass1
和 BarClass2
类继承 BarBase
并分别以自己的方式实现 Method2
和 Method3
。
也许是这样的:
struct BarInterface
{
void Method2() = 0;
void Method3() = 0;
};
struct BarBase : public FooInterface, public BarInterface
{
void Method1() override final { /* Call Method2 or Method3... */ }
};
class BarClass1 : public BarBase
{
public:
void Method2() override final { /* ... */ }
void Method2() override final { /* ... */ }
};
class BarClass2 : public BarBase
{
public:
void Method2() override final { /* ... */ }
void Method2() override final { /* ... */ }
};
This way you can still use pointers to (for example) a `BarClass1` object when passing it to functions wanting a pointer to a `FooInterface`.