> 백엔드 개발 > C++ > 디자인을 손상시키지 않고 Friend 선언을 제거하는 방법은 무엇입니까?

디자인을 손상시키지 않고 Friend 선언을 제거하는 방법은 무엇입니까?

Patricia Arquette
풀어 주다: 2024-11-04 13:20:30
원래의
1000명이 탐색했습니다.

How to Remove a Friend Declaration Without Compromising Design?

디자인을 유지하면서 Friend 선언을 제거하는 방법

객체 지향 디자인에서 "friend" 키워드를 사용하면 긴밀한 종속성이 발생할 수 있습니다. 그리고 유지보수성을 방해합니다. 이 문서에서는 시스템의 전체 디자인을 유지하면서 친구 선언을 제거하는 포괄적인 접근 방식을 제공합니다.

문제 배경:

두 클래스, ClassA와 ClassA접속자님, 친구관계를 맺으세요. ClassA는 보호된 메서드가 있는 공유 리소스를 나타내고, ClassAAccessor는 이 리소스에 대한 액세스를 관리하는 도우미 역할을 합니다. ClassA와 ClassAAccessor 사이의 친구 관계를 통해 ClassAAccessor는 ClassA의 보호된 메서드에 직접 액세스할 수 있습니다.

디자인 제약 조건:

적절한 리팩토링을 보장하기 위해 몇 가지 제약 조건이 설정됩니다.

  • ClassAAccessor의 공개 인터페이스는 그대로 유지되어야 합니다. 변경되지 않습니다.
  • ClassA의 내부 작업은 비공개로 유지되어야 합니다.
  • 성능 및 메모리 소비에 큰 영향을 주어서는 안 됩니다.

리팩터링 단계:

1단계: 초록 소개 인터페이스

이전에 친구 관계를 통해 접근할 수 있었던 작업을 InternalInterface라는 별도의 인터페이스로 추출합니다. ClassA와 ClassAAccessor 사이의 관계를 리팩토링하여 friend 키워드를 사용하는 대신 이 인터페이스에 종속되게 만듭니다.

2단계: 작업을 인터페이스로 이동

작업을 다음에서 이동합니다. ClassA를 InternalInterface로 변경합니다. 이렇게 하면 ClassAAccessor에서 ClassA로 직접 "호출" 종속성이 제거됩니다.

3단계: 함께 구현 결합

ClassAAccessor에서 다음 인스턴스를 가리키는 전용 멤버 변수를 만듭니다. 내부 인터페이스. ClassAAccessor가 필요한 내부 작업에 액세스할 수 있도록 이 멤버 변수를 설정할 수 있는 ClassA 메서드를 도입하세요.

구현 예:

<code class="cpp">class ClassAAccessor {
public:
    ClassAAccessor(ClassA&amp; classA);
    void setInternalInterfaceRef(InternalInterface &amp; newValue) {
        internalInterfaceRef = &amp;newValue;
    }
private:  
    InternalInterface* internalInterfaceRef;
};

class ClassA : protected InternalInterface {
public:
    attachAccessor(ClassAAccessor &amp; accessor);
};</code>
로그인 후 복사

의 장점 리팩토링:

  • ClassA와 ClassAAccessor 간의 긴밀한 종속성을 제거합니다.
  • ClassA의 내부 작업에 대한 비공개 액세스를 보장합니다.
  • 더 모듈화되고 유지 관리하기 쉬운

리팩토링의 단점:

  • 코드 구조의 복잡성이 증가합니다.
  • 다음으로 인해 메모리 소비가 약간 증가할 가능성이 있습니다. 추가 인터페이스 도입.
  • 보호 대상에 대한 제한된 UML 지원 일반화 관계.

위 내용은 디자인을 손상시키지 않고 Friend 선언을 제거하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿