设计模式,只有通过库才能访问Derived类

时间:2013-01-29 19:59:17

标签: c++ design-patterns inheritance delegates class-design

尝试实现一种设计,其中实现接口的类只能从库中调用。换句话说,对实现的接口的访问应该通过库(TopLib)。似乎应该使用委托的情况。你怎么看待这个设计?这是有效的,但会欣赏反馈和建议,使其更好,更强大和万无一失。

class Interface 
{
protected:
    virtual void hi(void) = 0;
};

class ABC : private Interface {
protected:
    ABC() {}
    virtual void hi() {
        std::cout << "abc" << std::endl;
    }
};

class XYZ : private Interface {
protected:
    XYZ() {}
    virtual void hi() {
        std::cout << "xyz" << std::endl;
    }
};

template<typename T>
class TopLib : private T
{
public:
    void sayhi() {
        hi();
    }
};

int _tmain(int argc, _TCHAR* argv[])
{
    TopLib<ABC> b;
    b.sayhi();

    TopLib<XYZ> c;
    c.sayhi();
    //c.hi(); <- fails

    //ABC test; <- fails
    //test.hi(); <- fails

    getchar();
    return 0;
}

1 个答案:

答案 0 :(得分:1)

可以在派生类中放宽访问修饰符,因此您将受到实现该接口的人的支配。没有什么可以阻止我说

class FooBarBaz : private Interface {
  public:
    FooBarBaz() {}
    virtual void hi() { // Implements Interface::hi()
        std::cout << "see what i mean!" << std::endl;
    }
};

使用或不使用TopLib<FooBarBaz>