두 개의 로봇 클래스 인스턴스가 있습니다. 나는 몇 가지 방법 (예를 들어, go()
) 내가 원하는을 실행하면 그것이 올바른 주파수에있는 경우 에 대한 모든 인스턴스는 이동합니다. 예 (모든 것이 하나의 파일에 있음) :C++에서 인스턴스간에 메소드를 호출하는 방법
class Robot {
int freqency_from;
int freqency_to;
bool is_going = false;
bool isOnFrequency(int frequency) {
return (frequency >= frequency_from && frequency <= frequency_to);
}
public:
Robot(int _freqency_from , int _freqency_to) {
freqency_from = _freqency_from;
freqency_to = _freqency_to;
}
void go(int frequency) {
if (isOnFrequency(frequency)) {
is_going = true;
}
}
bool isGoing() {
return is_going;
}
};
int main() {
Robot robot1 = Robot(1, 3);
Robot robot2 = Robot(3, 5);
cout << robot1.isGoing(); // false
cout << robot2.isGoing(); // false
Robot::go(1); // should be run for each and every instance of the Robot class
cout << robot1.isGoing(); // true
cout << robot2.isGoing(); // false
return 0;
}
이 의사 코드는 어떻게 작성합니까? Robot의 모든 인스턴스를 벡터화하고 맵핑하지 않고도 가능한가?
기존 인스턴스에 대한 포인터의 정적 멤버 벡터를 가질 수 있으며'go' 메서드도 정적으로 만들 수 있습니다. 그러나 나는 이것이 좋은 디자인이라고 생각하지 않는다. – Corristo
이것은 정적/"싱글 톤"영역으로 가고 있으며 코드 냄새가 나는 것처럼 보입니다. 이 경우 각각의 '로봇'이해야 할 일이 있다면 다양한 작업을 수행 할 수 있도록 로봇의 모음을 유지하는 'RobotManager'가 있어야합니다. 그 비즈니스 로직은'Robot' 클래스 자체에 있지 않아야합니다. – CoryKramer
@CoryKramer는 [내가 부를 것이다 .. SomethingManager (https://blog.codinghorror.com/i-shall-call-it-somethingmanager/) –