Ich brauche Hilfe, lose Kopplung zu verstehen. Wie erstellt man eine Klasse, die die Komposition verwendet, um lose gekoppelt zu sein, wenn ein untergeordnetes Objekt mit seinem übergeordneten Objekt kommunizieren muss? Lassen Sie mich ein Beispiel geben:Lose Kupplung in Zusammensetzung
Wir haben dies:
class A {
private:
B b;
public:
void foo();
};
Wie funktioniert das B-Objekt die Funktion foo() aufrufen, aus seinem Behälter Klasse A? Die offensichtliche Antwort lautet: "Gib einfach einen Zeiger von A auf das B", aber das ist eine enge Kopplung und ein unflexibles Design.
Können Sie bitte geben Sie mir eine einfache Lösung für dieses Problem (in C++ oder Java vorzugsweise) oder bieten Design-Techniken, die mit diesen Arten von Problemen umgehen?
Mein Beispiel aus dem wirklichen Leben kommt von der Entwicklung einer Spiel-Engine für ein JRPG. Ich habe diese Klasse:
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);
};
In jedem Spiel Schleife Update()
von StateMachine
genannt wird, die die Update()
Funktion von curState
aufruft. Ich möchte curState
von der StateMachine
Klasse anrufen, aber mit losen Kopplung.
Sie sind gekoppelt sowieso da A enthält B. – doctorlove
Make A eine Observable. Mache B zu einem Beobachter. –