2014-05-21 4 views
2

아래 클래스 다이어그램에서 Bridge 디자인 패턴을 사용하여 간단한 문서 작성기 응용 프로그램을 구현하려고했습니다. 구체적인 "DocMakers"는 문서 레이아웃 작업을 담당하지만 각 문서를 다른 형식으로 생성하는 "IFileFormat"을 허용합니다.Bridge 디자인 패턴에서 단일 기능에 특수 기능을 추가 할 수 있습니까?

제 문제는 문서를 특별한 방식으로 수정할 수 있기를 원합니다. PDF 인 경우

이 특수 PDF 기능이 DocMakerLayoutA 또는 DocMakerLayoutB이든 관계없이 문서 작성 마지막에 발생하지만 모든 것이 인터페이스에 의해 지배되므로 장소를 찾지 못하는 것 같습니다. 그것을 위해.

"DoSomethingSpecialForPDF"함수를 "IDocMaker"에 추가하면 작동하지만 "FileFormarBMP"클래스의 경우 아무런 작업도 수행하지 않아야합니다. 그것은 단지 나쁜 디자인처럼 보인다.

처음부터 잘못 설계 한 적이 있습니까? 아니면이 구조로이 작업을 수행 할 수있는 방법이 있습니까? 당신은 추상화와 구현을 분리 할 필요가있을 때

Sample class diagram using Bridge design pattern

+0

두 가지를 원한다고 생각합니다. 하나는 다른 문서 유형을 만들 수 있으므로 일반 문서 데이터 유형을 정의하게됩니다. 다른 하나는 다른 유형의 기능을 사용하여 문서를 만들려고합니다. 두 가지 다른 관점이 있습니다. –

답변

1

브리지 패턴이 적합합니다. 귀하의 경우 추상적으로 파일을 작성해야하므로 Layout은 구체적인 File 속성을 인식하지 않아야합니다. 따라서 브릿지 패턴을 사용하면 특별한 구현을위한 특별한 동작을 취할 수 없습니다. 귀하의 경우에는

, 당신은 어떤 File는 문서 작성 후 기능을 가지고 있다고 가정 할 수 있습니다, 그래서 당신은 두 개의 콘크리트 PDFBMPIFileFormatdoAfter() 방법을 추가하고 구현할 수 있습니다. PDF의 경우 doAfter()doSomthingSpecialForPdf으로 전화하고 BMP의 경우에는 아무 것도하지 않습니다.

나쁜 디자인 인 것처럼 보일지도 모르지만 실제로는 브리지 패턴의 장점 (두 변의 독립적 인 변형)이 처음에는 생각납니다.

여기에서 한 가지 요점은이 질문에 대한 답변입니다. 특수 PDF 기능을 담당 한 사람은 누구입니까?? 또는 정말로 관련있는 특수 기능은 누구입니까? File 또는 Layout?

+0

두 가지 다른 관점이 디자인에 지정되었습니다. 처음에는 일반적인 데이터 저장소를 찾고 다른 관점에서 볼 수 있습니다 (PDF, ..). 그런 다음 각 유형 (PDF, ..)을 수정할 수 있도록 결정했습니다. 하나를 선택해야합니다. –