2017-02-08 8 views
-2

폼 클래스를 확장하는 사각형 클래스와 폼의 x 및 y 속성에 대한 롤백을 수행하는 메멘토 클래스 및 폼 클래스를 확장하는 복합 클래스가 있습니다.메멘토 디자인 패턴 (복합 패턴 포함)

나는 캔버스를 가지고 있으며 그 위에 모양을 그리 고있다. 한 모양을 움직이면 괜찮습니다. 유품을 설치하면 그 움직임을 되돌릴 수 있습니다.

문제는 양식의 복합 개체에 도형을 그룹화하고 이동시킬 때, 메모를 설치하여 이동 작업을 롤백 할 수있는 방법을 찾을 수 없다는 것입니다. 누구든지 그 일을하는 방법을 알고 있습니까?

+0

memento? –

+0

이 필요합니다. 미안합니다. 미안합니다 – user7537256

답변

0

캔버스에있는 개별 모양이 아닌 전체 캔버스의 특정 상태에 대해 하나의 메멘토를 유지하는 것이 좋습니다. 이 Memento는 변경 불가능한 객체를 포함하는 하나의 복합 객체 일 수 있습니다. 오브젝트를 변경하면 속성을 변경하지 않고 새 속성으로 새 속성을 만들고 새로운 상황으로 전체 메테오를 다시 작성합니다.

약간의 메모리를 소비하는 것처럼 보일 수 있지만 불변의 객체가 아주 잘 재사용 될 수 있기 때문에 매우 잘 최적화 할 수 있습니다. 다음 Memento를 생성하는 동안 변경되지 않은 오브젝트를 재사용 할 수 있습니다.

이렇게 이해할 수 있는지 확실하지 않습니다. 불변성과 캔버스 한 점은 중요한 요소입니다.

+0

캔버스의 상태에 대한 기념물은 언두에서 다시 롤백하려는 형식 대신 캔버스 대신 오래된 캔버스를 가져올 것입니다. ? – user7537256

+0

정확합니다. '실행 취소'가 전체 캔버스에 관한 한, 메멘토는 전체 캔버스의 내용을 나타내야합니다. – pcjuzer