Hide Delegate(위임 관계 숨기기)

2294 단어

Summary: 


고객은 하나의 위탁을 통해 다른 대상을 호출한다.서비스 클래스에서 고객이 필요로 하는 모든 함수를 구축하여 위탁 관계를 숨깁니다.

Motivation:


패키지는 객체의 가장 중요한 피쳐가 아니더라도 가장 중요한 피쳐 중 하나입니다.'봉인'은 모든 대상이 가능한 한 시스템의 다른 부분을 적게 이해해야 한다는 것을 의미한다.이렇게 되면 변화가 발생하면 이 변화를 이해해야 하는 대상이 비교적 적고 변화가 비교적 쉽게 진행될 수 있다.
만약에 어떤 고객이 먼저 서비스 대상의 필드를 통해 다른 대상을 얻은 다음에 후자의 함수를 호출한다면 고객은 반드시 이 위탁 함수를 알아야 한다.만일 위탁 관계에 변화가 생기면 고객도 상응하는 변화를 해야 한다.우리는 서비스 대상에 간단한 위탁 함수를 놓아서 위탁 관계를 숨기고 이러한 의존을 제거할 수 있다.이렇게 되면 장래에 위탁관계의 변화가 발생하더라도 변화는 서비스 대상에 제한되어 고객에게 파급되지 않는다.
일부 또는 전체 고객의 경우 Extract Class를 먼저 사용해야 할 수도 있습니다.일단 모든 고객에게 위탁 관계를 숨기면 서비스 대상의 인터페이스에서 피위탁 대상을 공개할 필요가 없다.

Mechanics:


1. 모든 위탁 관계 중의 함수에 대해 서비스 대상에 간단한 위탁 함수를 구축한다.
2. 고객을 조정하여 서비스 대상이 제공하는 함수만 호출하도록 한다.
사용자와 서비스 제공자가 같은 가방에 있지 않으면 위탁 함수의 접근 권한을 수정하여 고객이 가방 밖에서 그것을 호출할 수 있도록 합니다.
3. 매번 조정 후 컴파일하고 테스트한다.
4. 더 이상 Delegate(위탁 클래스)를 필요로 하는 고객이 없으면 서비스 대상의 관련 접근 함수를 제거할 수 있습니다.
5. 컴파일, 테스트.

예제


두 가지 유형으로 시작합니다. "사람"을 대표하는 Person과 "부서"를 대표하는 Department:
public class Person
{
    Department department;

    public Department getDepartment()
    {
        return department;
    }

    public void setDepartment( Department arg )
    {
        department = arg;
    }
}
public class Department
{
    private String chargeCode;

    private Person manager;

    public Department( Person person )
    {
        manager = person;
    }

    public Person getManager()
    {
        return manager;
    }
}
고객이 매니저가 누구일 때까지 원하면 먼저 Department 대상을 받아야 한다.
manager = john.getDepartment().getManager();
이러한 인코딩은 고객에게 Department의 업무 원리를 폭로한 것이다. 그래서 고객은 Department까지'매니저'라는 정보를 추적한다.고객에게 Department를 숨기면 결합을 줄일 수 있습니다.이러한 목적을 위해 Person에서 다음과 같은 간단한 위임 함수를 만듭니다.
public Person getManager()
{
   return department.getManager();
}
이제 Person의 모든 고객을 수정하여 새로운 함수로 변경합니다.
manager = john.getManager();
Department의 모든 함수에 대한 위탁 관계를 완성하고 Person의 모든 고객을 수정하면 Person의 접근 함수getDepartment()를 제거할 수 있습니다.

좋은 웹페이지 즐겨찾기