시간 지연을 시뮬레이션하기 위해 '명령'과 '복합'을 어떻게 결합합니까?


9

학습 운동 (나는 학교에 있지 않습니다-단지 새로운 것을 배우려고 노력하는 노인), 나는 전파 지연을 통합하는 논리 게이트 시뮬레이션을 작성하려고합니다. 사용자는 게이트를 함께 그룹화하여 더 높은 수준의 객체를 만들 수 있어야합니다.

문제에 디자인 패턴을 적용하고 싶지만 어려움을 겪고 있습니다.

Head First Design Patterns를 읽고 있는데 Command 패턴이 지연된 회로를 통해 전기 펄스를 시뮬레이션하는 좋은 방법이라는 것을 알았습니다. 또한 복합 패턴이 중첩 단위를 시뮬레이트하는 좋은 방법임을 알았습니다. 나는 단지 두 가지를 섞는 방법을 모른다.

다시 말해, 게이트를 반복하면서 게이트 'x'가 발사되어야한다는 것을 알 수 있습니다. 지연 시간은 15 나노초이므로 현재 게임 시간에서 15ns의 타임 스탬프가있는 명령을 만듭니다. 디스패처는 어디에 있습니까? 식당의 예에서 명령이 '주문'인 웨이트리스와 요리사는 각각 명령을 전달하고 지연을 도입 할 수 있습니다. '복합'게이트가있는 경우 자체 디스패처도 있습니까? 큐를 관리하려면 싱글 톤을 사용해야합니까?

나는 내가 찾을 수있는 것을 읽었지만 여전히 올바른 방향으로 밀어야합니다.


9
패턴은 도구입니다. 하나는 망치와 스크류 드라이버를 사용하지 않고 집을 지을 것이라고 생각합니다. 대신, 집을 짓기 시작하고 망치로 작업을 더 쉽게 만들 수있는 곳을 찾으십시오.

그것은 내 질문에 정확히 답하지 않습니다. 게이트에서 게이트로 메시지를 전달하는 큰 Java 응용 프로그램이 이미 빌드되어 있습니다. 그러나 전파 지연을 통합하려고하는데 응용 프로그램 디자인이 전파 지연을 쉽게 처리 할 수 ​​없다는 것을 알았습니다. 나는 ... 디자인 패턴이 도움이 될 기대했다
닐 Mussett

4
당신이 찾고있는 이산 이벤트 시뮬레이션 - 같은 크론 하지만 '진짜'시간없이. 이것을 구축하고 "아, 나는 복합 재료를 솔루션에 쐐기 모양으로 만드는 방법을 찾지 않고 복합기를 만들고 있습니다.

1
특히, 당신은 1977 년 8 월 ACM, Volume 20, Number 8의 통신에서 시뮬레이션 이벤트 세트를위한 효율적인 데이터 구조를 발견 할 수 있습니다. it)-색인화 된 목록에 비해 크게 개선 된 데이터 구조 구현 개념을 살펴 봅니다.

1
다음 은 citeseerx에서 호스팅되는 ACM 논문에 대한 링크입니다.
Frank

답변:


1

Java에서 수행하려는 작업을 수행하는 시뮬레이터가 있으므로 Scala의 Programming에서 예제를 볼 수 있습니다 .

http://www.cs.helsinki.fi/u/wikla/OTS/Sisalto/examples/html/ch30.html#sec6

그들의 접근 방식을 살펴보면 원하는 행동을 취하도록 프로그램을 변경하는 방법을 찾을 수 있습니다.

당신은 그것을 쉽게 추가 할 수 없다고 언급 했으므로 접근 방식이 무엇인지, 그리고 당신이 직면하는 어려움이 무엇인지 설명하지 않아도 사람들은 당신이 고려하지 않은 몇 가지 제안을 줄 수 있습니다.

앞에서 언급했듯이 디자인 패턴은 코드가 수행하는 작업을 간단히 말해 줄 수있는 방법이지만 디자인 패턴을 강제로 적용하려는 아이디어는 나쁜 생각처럼 보입니다.

기본적으로 전파 지연은 어렵지 않아야합니다.

당신은 기본 클래스를 가질 수 있으며 Gate지연됩니다.

모든 게이트는 이로부터 연장되어 실제 지연을 설정합니다.

이제 신호를 추적 할 때 게이트에있을 때 해당 스레드가 시뮬레이션 된 지연 시간 동안 휴면 상태가 될 수도 있지만 시뮬레이터가 실제 시스템보다 느리기 때문에 실시간을 시뮬레이션 된 시간에 매핑해야합니다. 될 것입니다.

스레드가 너무 많으면 다음 목록을 기준으로 정렬 된 목록에 넣고 일시 중지하면 지연 시간과 각 루프에서 시뮬레이터가 현재 준비된 스레드를 선택합니다. 다음 작업을 수행 한 후 다음 지연이 발생합니다.

이것은 게임 루프와 비슷합니다.


0

다시 말해, 게이트를 반복하면서 게이트 'x'가 발사되어야한다는 것을 알 수 있습니다.

그런 다음 명령 패턴을 사용하지 않습니다.

'복합'게이트가있는 경우 자체 디스패처도 있습니까?

신 이시여 복합 패턴의 전체 요점은 복합 물체를 단지 하나의 물체 만 예상하는 위치에 공급할 수 있다는 것입니다. 이를 통해 제정신으로 행동을 구성 할 수 있습니다.

큐를 관리하려면 싱글 톤을 사용해야합니까?

지옥 아니 전 세계에 요리사와 웨이트리스가 한 명뿐입니까? 부엌이 하나 밖에 없나요?

명령과 복합 패턴을 혼합하는 것은 매우 간단합니다. 명령을 나타내는 인터페이스가 있습니다. 각 구체적인 명령은 일부 동작을 제공하기 위해 해당 인터페이스를 재정의 (또는 상속하지 않는 언어로 충족) 할 수 있습니다. 당신의 지연은 그러한 간단한 행동 중 하나입니다.

복합 패턴은 단일 인터페이스 뒤에 2 개 이상의 객체 / 동작을 제공합니다. 이 예제의 가장 간단한 사용법은 두 개의 다른 명령을 사용한 다음 실행하라는 지시가있을 때 저장된 두 명령을 트리거하는 복합 명령입니다. 이렇게하면 격리 된 '지연'명령과 임의의 다른 명령을 사용하여 지연된 명령을 만들 수 있습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.