组合物松散耦合

Fr0*_*Bit 5 c++ oop

我需要帮助理解松耦合.当子对象需要与父对象通信时,如何设计一个使用组合松散耦合的类?让我举个例子:

我们有这个:

class A {
    private:
        B b;
    public:
        void foo();
};
Run Code Online (Sandbox Code Playgroud)

B对象如何从容器类A调用函数foo()?显而易见的答案是"只是将指针从A传递到b",但这是紧密耦合,而且设计不灵活.

你能给我一个简单的解决方案来解决这个问题(最好用C++或Java)或提供处理这些问题的设计技巧吗?

我的真实案例来自为JRPG开发游戏引擎.我有这门课:

class StateMachine
{
    private:
        std::map<std::string, State*> states;
        State* curState;
    public:
        StateMachine();
        ~StateMachine();
        void Update();
        void Render();
        void ChangeCurState(const std::string& stateName);
        void AddState(const std::string& stateName, State* state);
};
Run Code Online (Sandbox Code Playgroud)

在每个调用的游戏循环Update()StateMachine,调用Update()函数curState.我想要curState能够ChangeCurStateStateMachine班级调用,但松耦合.

pil*_*rth 6

您可以使用接口解耦.

创建一个F实现该foo()方法的接口并将其传递给B.让A实现F.现在b可以foo()在不知道甚至关心它的情况下调用F由A实现.