Tôi cần trợ giúp để hiểu khớp nối lỏng lẻo. Làm thế nào để thiết kế một lớp sử dụng thành phần để được ghép lỏng lẻo, khi một đối tượng con cần giao tiếp với đối tượng cha mẹ của chúng? Hãy để tôi đưa ra một ví dụ:Khớp nối lỏng lẻo trong bố cục
Chúng tôi có điều này:
class A {
private:
B b;
public:
void foo();
};
Làm thế nào để đối tượng B gọi hàm foo() từ container lớp A? Câu trả lời rõ ràng là "chỉ cần vượt qua một con trỏ từ A đến b", nhưng điều này là khớp nối chặt chẽ, và một thiết kế không linh hoạt.
Bạn có thể vui lòng cho tôi giải pháp đơn giản cho vấn đề này (trong C++ hoặc Java tốt hơn) hoặc cung cấp các kỹ thuật thiết kế để giải quyết các vấn đề này?
Ví dụ thực tế đời sống của tôi xuất phát từ việc phát triển công cụ trò chơi cho JRPG. Tôi có lớp này:
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);
};
Trong mỗi vòng lặp trò chơi Update()
của StateMachine
được gọi, trong đó kêu gọi các Update()
chức năng của curState
. Tôi muốn thực hiện curState
có thể gọi ChangeCurState
từ lớp StateMachine
nhưng có khớp nối lỏng lẻo.
Chúng vẫn được ghép nối vì A chứa B. – doctorlove
Tạo thành A quan sát. Biến B thành Observer. –