6 대 원칙 (3) - 거꾸로 원칙 에 의존

5438 단어 6 대 원칙
후진 원칙 에 의존 하 다.
개술
정의.
고 층 모듈 (즉 클 라 이언 트 / 호출 자) 은 저층 모듈 에 의존 해 서 는 안 되 고 이들 은 모두 추상 에 의존 해 야 한다.추상 은 세부 사항 에 의존 해 서 는 안 된다.세부 사항 은 추상 에 의존 해 야 한다.쉽게 말 하면 인터페이스 프로 그래 밍
문제 의 유래
클래스 A 는 클래스 B 에 직접 의존 합 니 다. 클래스 A 를 의존 클래스 C 로 바 꾸 려 면 클래스 A 의 코드 를 수정 하여 이 루어 져 야 합 니 다.이런 장면 에서 류 A 는 보통 고 층 모듈 로 복잡 한 업무 논 리 를 책임 진다.클래스 B 와 클래스 C 는 저층 모듈 로 기본 적 인 원자 조작 을 책임 집 니 다.클래스 A 를 수정 하면 프로그램 에 불필요 한 위험 을 가 져 올 수 있 습 니 다.
해결 방안
클래스 A 를 의존 인터페이스 I 로 수정 하고 클래스 B 와 클래스 C 는 각각 인터페이스 I 를 실현 하 며 클래스 A 는 인터페이스 I 를 통 해 클래스 B 또는 클래스 C 와 간접 적 으로 연락 하면 클래스 A 를 수정 할 확률 을 크게 낮 출 수 있다.
후진 원칙 에 의존 하 는 것 은 이러한 사실 을 바탕 으로 한다. 세부 적 인 다 변성 에 비해 추상 적 인 것 이 안정 적 이 어야 한다.추상 을 바탕 으로 구 축 된 구 조 는 디 테 일 을 바탕 으로 구 축 된 구조 보다 훨씬 안정 적 이다.자바 에서 추상 은 인터페이스 나 추상 류 를 말 하 는데 세부 적 인 것 은 구체 적 인 실현 류 이다. 인터페이스 나 추상 류 를 사용 하 는 목적 은 규범 과 계약 을 잘 제정 하고 구체 적 인 조작 과 관련 되 지 않 으 며 세부 적 인 임 무 를 그들의 실현 류 에 맡 기 는 것 이다.
반 례 를 들다
    public static void main(String[] args){
        LiMing liMing = new LiMing();
        liMing.gotoSchool(new Foot());
    }

    static class Foot{
        public String getWay(){
            return "  ";
        }
    }

    static class LiMing{
        public void gotoSchool(Foot foot){
            System.out.println("  " + foot.getWay()+ "  ");
        }
    }

출력
      

코드 가 정상적으로 돌아 가 는 것 은 문제 가 없 지만 매우 취약 해 보인다.이명 이 이사 해서 멀 어 졌 다 고 가정 하면 이명 이 버스 를 타고 학교 에 가 려 면 어떻게 합 니까?버스 가 없어 서 지하철 만 타면 어 떡 하지?
정확 한 예
    interface Way{
        String getWay();
    }
    static class Foot implements Way{
        @Override
        public String getWay(){
            return "  ";
        }
    }
    static class Bus implements Way{

        @Override
        public String getWay() {
            return "   ";
        }
    }

    static class Metro implements Way{
        @Override
        public String getWay() {
            return "   ";
        }
    }

    static class LiMing{
        public void gotoSchool(Way way){
            System.out.println("  " + way.getWay()+ "  ");
        }
    }

     public static void main(String[] args){
        LiMing liMing = new LiMing();
        System.out.println("     ");
        liMing.gotoSchool(new Foot());
        System.out.println("   ,     ");
        liMing.gotoSchool(new Bus());
        System.out.println("     ");
        liMing.gotoSchool(new Metro());
    }

출력

총결산
예 에 따라 정 의 를 되돌아보다.
고 층 모듈 (즉 클 라 이언 트 / 호출 자) 은 저층 모듈 에 의존 해 서 는 안 되 고 이들 은 모두 추상 에 의존 해 야 한다.
이명 (고 층 모듈) 은 구체 적 인 교통 방식 (바 텀 모듈) 에 의존 하지 않 고 인터페이스 way (추상) 에 의존한다.
추상 은 세부 사항 에 의존 해 서 는 안 된다.
이명 은 웨 이에 의존 해 구체 적 인 웨 이 가 어떻게 실현 되 는 지 에 관심 이 없다.
세부 사항 은 추상 에 의존 해 야 한다.
걷 기 / 버스 / 지하철 이런 교통 방식 은 모두 웨 이 인 터 페 이 스 를 실현 해 야 호출 될 수 있다.
장점.
클래스 간 의 소나무 결합 디자인 은 인터페이스 프로 그래 밍 에 추상 적 이 고 디 테 일 에 의존 하지 않 기 때문에 특정한 유형의 코드 를 수정 할 때 다른 유형의 수정 과 관련 되 지 않 고 시스템 위험 을 현저히 낮 추 며 시스템 의 건장 성 을 향상 시킨다.

좋은 웹페이지 즐겨찾기