클래스 EventManager
의 인스턴스 인 클래스 Command
이 있습니다. 클래스 명령은 생성자에 두 개의 인수 (host
, target
)가 필요합니다. 타겟팅 클래스의 멤버 함수는이 메소드 cmd->Execute()
를 사용해야하는 경우ctor에 인수가 필요한 싱글 톤 클래스
class EventManager
{
public:
void Event1(){ cmd->Execute(_eventEnum); }
private:
Command *cmd;
};
class Command
{
public:
Command(Host h, Target t)
void Execute();
private:
}
은 이제, cmd
대상의 인스턴스 변수를 확인하거나 단독으로 글로벌하게 할 필요가있다.
호스트 인스턴스를 사용하지 않기 때문에 cmd
을 대상의 인스턴스 변수로 사용할 수 없습니다. 그것을 확인하기 위해 싱글 내가 GetInstance
이 CreateInstance
후에 호출되어 있는지 확인하기 위해 필요한이
class Command
{
public:
CreateInstance(Host h, Target t);
GetInstance();
void Execute();
private:
Command(Host h, Target t);
}
같은 두 가지 방법을 추가하는 것입니다. 다른 대안?
대상 클래스는 이벤트가 적은 하위 수준 클래스입니다.
Target::LowlevelEvent()
{
cmd->Execute(lowlevelevent) //In Execute for lowlevelevent in Command class, i might call target->reset
}
이암은 분명히 설명 할 수 없기 때문에 죄송합니다. 문제는이 코드에는 EventManager 또는 Target과 같은 클래스에있을 수있는 많은 이벤트 (메서드)가 있다는 것입니다.
이러한 각 이벤트에서 Command-> Execute()를 호출해야합니다. 명령 클래스에는 특정 조치를 수행 할 수 있기 때문에 호스트 및 대상 인스턴스가 필요합니다.
EventManager :: Event1() { cmd-> Execute (_event1); }
대상 :: Event2() { cmd-> Execute (_event2); }
명령 : 실행 (이벤트 전자) { 경우 (_event1 == 전자) { 호스트 -> 호출 액션(); } if (_event2 == e) { target-> CallSomeOtherAction(); }
이제 cmd는 EventManager와 Target 모두의 인스턴스 변수 여야합니다. 이제 EventManager에는 Command ctor에 전달할 수있는 호스트 및 대상 인스턴스가 있습니다.
하지만 대상에 호스트에 대한 액세스 권한이 없습니다. 그래서 나는 Target 클래스에서 Command 인스턴스를 생성 할 수 없다.
그래서 EventManager ctor에서 싱글 톤을 생성하는지 궁금합니다. 그런 다음 대상에서 GetInstance()를 호출합니다. 나는 그 나쁜 생각을 안다. 그러나이 거대한 디자인으로, 나는 알아낼 수 없다. 당신의 도움을 주셔서 감사합니다.
'코드에 따라'EventManager'의 인스턴스가 아닌 Command' 또한 어떤'Target' 모습입니까? 당신은 코드 예제를 수정해야합니다 ... – Nim
나는 이것이 디자인 문제에 더 가깝다고 생각합니다. 명령을 싱글 톤으로 만드는 것은 하나의 명령 만 가질 수 있음을 의미합니다. 또한 Target은 스스로 명령을 실행해서는 안됩니다. –
[싱글 톤 디자인을 피하십시오] (http://www.techradar.com/news/software/applications/10-mistakes-every-programmer-makes-909424)를 시도해야합니다. – Default