디자인을 유지하면서 Friend 선언을 제거하는 방법
객체 지향 디자인에서 "friend" 키워드를 사용하면 긴밀한 종속성이 발생할 수 있습니다. 그리고 유지보수성을 방해합니다. 이 문서에서는 시스템의 전체 디자인을 유지하면서 친구 선언을 제거하는 포괄적인 접근 방식을 제공합니다.
문제 배경:
두 클래스, ClassA와 ClassA접속자님, 친구관계를 맺으세요. ClassA는 보호된 메서드가 있는 공유 리소스를 나타내고, ClassAAccessor는 이 리소스에 대한 액세스를 관리하는 도우미 역할을 합니다. ClassA와 ClassAAccessor 사이의 친구 관계를 통해 ClassAAccessor는 ClassA의 보호된 메서드에 직접 액세스할 수 있습니다.
디자인 제약 조건:
적절한 리팩토링을 보장하기 위해 몇 가지 제약 조건이 설정됩니다.
리팩터링 단계:
1단계: 초록 소개 인터페이스
이전에 친구 관계를 통해 접근할 수 있었던 작업을 InternalInterface라는 별도의 인터페이스로 추출합니다. ClassA와 ClassAAccessor 사이의 관계를 리팩토링하여 friend 키워드를 사용하는 대신 이 인터페이스에 종속되게 만듭니다.
2단계: 작업을 인터페이스로 이동
작업을 다음에서 이동합니다. ClassA를 InternalInterface로 변경합니다. 이렇게 하면 ClassAAccessor에서 ClassA로 직접 "호출" 종속성이 제거됩니다.
3단계: 함께 구현 결합
ClassAAccessor에서 다음 인스턴스를 가리키는 전용 멤버 변수를 만듭니다. 내부 인터페이스. ClassAAccessor가 필요한 내부 작업에 액세스할 수 있도록 이 멤버 변수를 설정할 수 있는 ClassA 메서드를 도입하세요.
구현 예:
<code class="cpp">class ClassAAccessor { public: ClassAAccessor(ClassA& classA); void setInternalInterfaceRef(InternalInterface & newValue) { internalInterfaceRef = &newValue; } private: InternalInterface* internalInterfaceRef; }; class ClassA : protected InternalInterface { public: attachAccessor(ClassAAccessor & accessor); };</code>
의 장점 리팩토링:
리팩토링의 단점:
위 내용은 디자인을 손상시키지 않고 Friend 선언을 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!