UndoRedo를 구현 하고 있습니다.4
createColne 매소드를 모든 심볼에 대해서 구현을 완료 했습니다. concreteSymbol의 clone함수를 구현하려다 보니 부모 클래스의 멤버 변수도 모두 복사해야 다 던데요.. 그부분을 각각의 concreteSymbol에 넣으니까 각 클래스에 중복된 코드가 엄청 많아 졌습니다. 부모클래스에 그 코드를 넣으려고 해도 자식클래스가 어떤 타입인지 모르기 때문에 결국 다시 하위 클래스에서 다시 복사해야 할 것 같아서 일단 모두 concreteSymbol에서 모두 복사하도록 하였습니다. 그렇게 하고 모듈 테스트를 위해 여전히 도형의 생성에 대해서만 redo undo 를 체크 했는데 생각하는 것과 다른 결과가 나왔습니다. undo를 많이 하고 나서 다른 작업을 할때는 redo할것이 없어야 합니다.( 다..
2009.10.28
no image
UndoRedo를 구현 하고 있습니다3.
Deep Copy... 과연 많이 해도 좋을지 모르겠습니다. 오전까지의 구현에서 얕은 복사를 하고 있었기 때문에 Undo, Redo를 해도 제대로 동작 하지 않았습니다. 그래서 UndoRedoManager가 관리 하는 history에 SymbolManager가 만들어 낸 memento를 넣을때 SymbolManager가 갖고 있는 멤버변수를 모두 Deep copy해야 한다는 결론이 나왔습니다. 일단, SymbolManager가 갖고 있는 멤버 변수들은 모두 colloection들로 모두 레퍼런스 변수를 담고 있습니다. 이 레퍼런스 변수는 DSymbol이라는 놈들인데요..(실제로는 DSymbol을 상속받은 것들이겠죠) 그림에 드려질 도형들입니다. 문제는 이 DSymbol안에 있는 것들도 상당한 양의 레퍼런..
2009.10.27