자바 디자인 모델 - 디자인 모델 의 6 대 원칙

더 읽 기
        이른바 무 수 승 유 수 라 고 하 는데, 한 가지 쿵 푸 를 연습 하 는 것 은 내공 과 외공 으로 나 뉜 다.외공 은 손짓 과 같 아서 이른바 23 가지 디자인 모델 이다.내공 은 심 법, 그것 이 바로 이 여섯 가지 법칙 이다.외공 만 할 줄 아 는 것 은 주먹 으로 다 리 를 수 놓 는 것 이 고 내공 을 닦 는 것 이 야 말로 경지 이다.이렇게 많은 디자인 모델 을 두 번 배우 고 세 번 배 워 도 잊 어 버 릴 수 있 는 단 례 와 공장 모델 만 기억 할 수 있다.그러나 원칙 만 기억 하면 앞으로 의 디자인 에서 의도 적 으로 사용 할 수 있 는 디자인 모델 의 정 수 를 기억 할 수 있다.
        상편 에 서 는 이미 6 대 디자인 원칙 에 대해 비교적 깊이 논술 하 였 으 며, 아래 에 서 는 빠르게 돌 이 켜 볼 수 있 도록 간소화 하 였 다.
단일 직책 원칙
        클래스 변경 을 초래 하 는 원인 보다 더 많은 것 은 존재 하지 마라.한 가지 직책 만 맡 는 다 는 것 이 통속 적 이다. 
        문제 의 유래: 유형 T 는 두 가지 서로 다른 직책 을 책임 진다. 직책 P1, 직책 P2.직책 P1 수요 가 바 뀌 어 클래스 T 를 수정 해 야 할 경우 정상적으로 작 동 하 던 직책 P2 기능 이 고장 날 수 있 습 니 다.
        한 마디 로 요약 하면 그림 코드 의 양 이 적 기 때문에 소 머리 와 말 입 을 같은 종류 로 막 아 서 는 안 된다.
 
이. 리 씨 교체 원칙
1. 자 류 는 부류 의 추상 적 인 방법 을 실현 할 수 있 으 나 부류 의 비 추상 적 인 방법 을 덮어 서 는 안 된다.
2. 하위 클래스 에서 자신 만 의 독특한 방법 을 추가 할 수 있다.
3. 하위 클래스 의 방법 으로 부모 클래스 의 방법 을 다시 불 러 올 때 방법의 선행 조건 (즉, 방법의 형 삼) 은 부모 클래스 방법의 입력 매개 변수 보다 더 느슨 하 다.
4. 하위 클래스 의 방법 이 부모 클래스 의 추상 적 인 방법 을 실현 할 때 방법의 후 치 조건 (즉, 방법의 반환 값) 은 부모 클래스 보다 더욱 엄격 하 다.
한 마디 로 요약 하면 아버지 류 가 이미 실현 한 방법 을 다시 쓰 지 말고 인터페이스 등 다른 방법 으로 돌아 갈 수 있다.
 
3. 후진 원칙 에 의존한다.
        고 층 모듈 은 저층 모듈 에 의존 해 서 는 안 되 고 둘 다 추상 에 의존 해 야 한다.추상 은 세부 사항 에 의존 해 서 는 안 된다.세부 사항 은 추상 에 의존 해 야 한다.
        여 기 는 하나의 열 로 설명 한다.
interface IEAT
{
        public void eat();//       
}
class EatApple implements IEAT {
        @Override
        public void eat() {
                //      
                System.out.print("eat a apple");
        }
}
class EatWater implements IEAT {
        @Override
        public void eat() {
                //      
                System.out.print("drink water");
        }
}
public class Human {
        //     ,    ,     
        public void dosomething(IEAT ieat) {
                ieat.eat();
        }

        /*
        //     ,    ,     
        public void dosomething(String food) {
                if(food.equals("apple")) {
                        //   
                }
                if(food.equals("water")) {
                        //  
                }
        }
        */

        public static void main(String[] args) {
                Human human=new Human();
                /*
                human.dosomething("apple");
                human.dosomething("water");
                */
                //      
                human.dosomething(new EatApple());
                //      
                human.dosomething(new EatWater());
        }
}

        그 중 주석 은 우리 가 자주 사용 하 는 방법 이다.바 나 나 를 먹고 수박 을 먹 으 려 면 dosomething 에 판단 을 써 야 하기 때문에 확장 에 매우 적합 하지 않다.써 있 으 면 헷 갈 려.
        따라서 한 마디 로 요약 하면 추상 적 인 인터페이스 로 같은 동작 을 묘사 하고 이 동작 을 실현 하 는 사람과 사물 간 의 결합 도 를 낮 춘 다.
 
인터페이스 격 리 원칙
        클 라 이언 트 는 필요 하지 않 은 인터페이스 에 의존 해 서 는 안 된다.다른 클래스 에 대한 의존 은 최소 인터페이스 에 세 워 져 야 한다. 
        문제 의 유래: 클래스 A 는 인터페이스 I 를 통 해 클래스 B 에 의존 하고 클래스 C 는 인터페이스 I 를 통 해 클래스 D 에 의존한다. 만약 에 인터페이스 I 가 클래스 A 와 클래스 B 에 있어 최소 인터페이스 가 아니라면 클래스 B 와 클래스 D 는 그들 이 필요 로 하지 않 는 방법 을 실현 해 야 한다.
        한 마디 로 요약 하면 물고기 와 사람 두 가지 와 같다. 물고 기 는 수영 과 볼 호흡 두 가지 동작 이 고 사람 은 걷 기와 밥 을 먹 는 두 가지 동작 이다. 이런 동작 은 하나의 인터페이스 에 쓸 수 없고 이 네 가지 동작 을 모두 포함한다.물고기 와 사람 을 위 한 두 개의 인터페이스 로 뜯 어야 한다.
 
5. 디 미트 의 법칙
        디 미트 의 법칙 은 최소한 의 원칙 이 라 고도 하 는데 이 르 면 1987 년 미국 Northeastern University 의 이안 Holland 가 제기 했다.통속 적 으로 말 하면 자신 에 게 의존 하 는 부류 에 대해 아 는 것 이 적 을 수록 좋다 는 것 이다.즉, 의존 되 는 클래스 에 대해 논리 가 아무리 복잡 하 더 라 도 가능 한 한 논 리 를 클래스 의 내부 에 밀봉 하고 대외 적 으로 제공 하 는 Public 방법 을 제외 하고 어떠한 정보 도 누설 하지 않 는 다 는 것 이다.
        이것 은 좀 기억 하기 어렵다.
 
개폐 원칙
        이것 은 할 말 이 없다. 가능 한 한 소프트웨어 실 체 를 확장 하 는 행 위 를 통 해 변 화 를 실현 하 는 것 이지 기 존의 코드 를 수정 함으로써 변 화 를 실현 하 는 것 이 아니다.
 
글 의 출처:http://blog.csdn.net/cq361106306/article/details/38708967

좋은 웹페이지 즐겨찾기