2

오픈 클로즈 원칙에 대한 Wikipedia page (오늘 2013 년 2 월 27 일 현재)은 상속을 통해 실현된다고 말합니다.Façade는 공개 원칙을 사용합니까?

이름 열기/닫기 원칙은 두 가지 방식으로 사용되었습니다. 두 가지 방법 모두 명백한 딜레마를 해결하기 위해 상속을 사용하지만 목표, 기술 및 결과는 다릅니다.

"두 가지 방법"은 Meyer의 구현 상속과보다 일반적인 다형성 확장을 참조합니다.

어쨌든, 제 질문은 이 아닌 Façade 패턴에 관한 것이고은 상속을 사용합니다. 보다 복잡한 서브 시스템 (또는 라이브러리)에 대한 단순화 된 인터페이스의 형태로 추상화를 정의했기 때문에 이것을 개방형 원칙으로 간주 할 수 없습니까? 구체적 :

서브 시스템 (또는 라이브러리) 인터페이스를 변형 폐쇄 인 외관, 사용하는 클라이언트에 대한 확장개방된다.

또는 그냥 (당신이 Protected Variations로 간주 특히, OCP 매우 가깝습니다) 정보 은폐의 경계를 스트레칭하고있다.

답변

1

아니요, Facade 패턴은 OCP와 다른 우려를 나타냅니다. Facade는 다른 클래스에 앞선 클래스 일뿐입니다. Facade는 고객이 앞서가는 수업의 변화를 차단하지만 OCP는 아닙니다. OCP는 요구 사항의 변화에 ​​따라 개별 클래스가 어떻게 변경되는지에 대한 것입니다. Facade에 관한 정보는 변경 사항을 전달하기 위해 설정되지 않습니다. 파사드에 대한 클라이언트의 요구 사항이 변경되면 파사드도 변경됩니다. 파사드가 관심을 갖는 방식으로 Facade가 변경하는 클래스가 있으면 Facade도 변경됩니다.

OCP를 따르도록 설정된 Facade 버전을 상상할 수 있습니다 - 클라이언트 인터페이스가 수정을 위해 닫히지 만 새로운 요구 사항을 수용하도록 확장 될 수있는 추상 클래스 또는 인터페이스 일 수 있습니다. 사실 저는 항상 Facades를 그런 식으로 구현했지만 Facade에 대한 고전적인 설명의 일부는 아닙니다.

+0

'클라이언트의 요구 사항이 Facade로 변경되면 Facade도 변경됩니다.'클라이언트는 수정 *에 대해 닫힙니다. 전략도 그렇게 깨질 것입니다. 'Facade가 관심을 갖는 방식으로 Facade가 변하는 수업이 있다면, Facade도 그렇습니다. '- 그러나 Facade의 숨겨진 부분이 바뀝니다. [OCP == 클래스 내 비공개 변수] (https://www.cs.duke.edu/courses/fall07/cps108/papers/ocp.pdf#page=9). – Fuhrmanator

+0

저는 Facade가 불안정한 (개인 같은) 하위 시스템에 대한 안정적인 인터페이스라고 봅니다. 인터페이스 나 추상 클래스가 필요하다는 것에 대해서는 확실하지 않습니다. [JOptionPane] (https://docs.oracle.com/javase/7/docs/api/javax/swing/JOptionPane.html)은 내가 좋아하는 Facade의 예입니다. 추상 클래스/인터페이스는 아닙니다. 그것의 public 부분은 (아마 메소드를 추가하는 것을 제외하고는) 언제든지 바뀔 것입니다. – Fuhrmanator

+0

나는 이것에 대해 조금 생각하고 아직 말하지 않은 나의 입장을 설명하기 위해 어떤 말도하지 않았다. 내가 뭔가를 생각하면 돌아올거야. –

관련 문제