디자인 패턴의 6 가지 원칙 중 하나-인터페이스 격리 원칙 및 Dimit의 규칙에 대한 자세한 설명
1. 인터페이스 분리 원칙 (ISP)
-
개념
인터페이스 격리의 원칙을 분리하기 전에 먼저 "
接口
"의 개념을 명확히해야합니다 . 인터페이스에는 두 가지 유형이 있습니다.-
강도 인터페이스
Java에서
new
키 를 통해 객체를 생성하는 것은 특정 유형의 사물에 대한 메서드 특성에 대한 설명이며 이는 논리적 추상화입니다. -
클래스 인터페이스
Java의
Interface
키워드 로 엄격하게 정의 된 인터페이스 (예 : java.lang.Runtime은 스레드 인터페이스)
인터페이스 격리 원칙에는 두 가지 정의가 있습니다.
- 클라이언트는 필요하지 않은 인터페이스에 의존해서는 안됩니다.
- 클래스 간의 종속성은 가장 작은 인터페이스에서 설정되어야합니다.
-
-
함유량
인터페이스는 애플리케이션 시나리오를 격리하고 호출자에게 필요한 메소드 만 제공하며 불필요한 메소드를 보호합니다.
예:
전자 상거래 시스템에는 주문이 있고 사용자 포털, 외부 시스템 및 관리 플랫폼에서 사용되며 세 곳에서 사용되는 방법이 다릅니다. 다음 코드를 통해 해결 방법을 살펴 보겠습니다.
사용자 포털 애플리케이션 인터페이스 :
public interface OrderForProtal { public String getOrder(); }
외부 시스템 애플리케이션 인터페이스 :
public interface OrderForOtherSys { public void insertOrder(); }
관리 플랫폼 애플리케이션 인터페이스 :
public interface OrderForAdmin { public String getOrder(); public void insertOrder(); public void updateOrder(); public void deleteOrder(); }
Order 클래스는 위의 세 가지 인터페이스를 구현합니다.
public class Order implements OrderForAdmin,OrderForOtherSys,OrderForProtal{ //返给Protal public static OrderForProtal getOrderForProtal() { return new Order(); } //返给OtherSystem public static OrderForOtherSys getOrderForOtherSys() { return new Order(); } //返给Admin public static OrderForAdmin getOrderForAdmin() { return new Order(); } @Override public String getOrder() { return "返回订单"; } @Override public void insertOrder() { System.out.println("插入订单"); } @Override public void updateOrder() { System.out.println("更新订单"); } @Override public void deleteOrder() { System.out.println("删除订单"); } }
Order 클래스가 위의 세 가지 인터페이스를 통해 서로 다른 인터페이스를 통해 서로 다른 사용자를 격리 할 수 있음을 찾는 것은 어렵지 않습니다.
-
요약하자면
- 인터페이스는 하나의 모듈 또는 비즈니스 로직 만 제공합니다.
- 비즈니스에 필요한 공개 방법 만 유지
- 오염 된 인터페이스를 수정하십시오. 수정 위험이 높으면 변환 처리에 어댑터 모드를 사용할 수 있습니다 (나중에 업데이트 될 예정 임).
- 인터페이스의 디자인은 상황에 따라 다르므로 도그마는 복사 할 수 없습니다.
- 인터페이스를 디자인 할 때 신중한 계획이 필요합니다. 디자인 과정에서 인터페이스의 세분화를 결정하기위한 더 많은 경험과 시도가 이루어져야합니다. 인터페이스의 세분화가 너무 작 으면 인터페이스 수가 급격히 증가하고 개발의 어려움이 증가합니다. 인터페이스의 세분성이 크면, 개발 유연성이 떨어지고 맞춤형 서비스를 제공 할 수 없습니다., 또한 프로젝트에 예상치 못한 위험을 초래합니다.
2. 데메테르의 법칙 (LoD)
-
개념
Dimit의 법칙은 LKP (Least Knowledge Principle) 라고도합니다 . 평신도 의 용어로 객체는 다른 객체에 대해 가능한 한 적게 알아야합니다.
표현이 많고 가장 대표적인 표현은 다음과 같습니다.
- 당신의 직접 친구 대응도
- "낯선 사람"에게 말하지 마세요
- 각 소프트웨어 단위는 다른 단위에 대한 최소한의 지식을 가지고 있으며이 이해는이 단위와 밀접하게 관련된 소프트웨어 단위로 제한됩니다.
-
함유량
다음으로 샘플 코드는 위 그림의 호출 관계를 설명하는 데 사용됩니다.
어떤 사람:
public class Someone {
public void call(Friend friend){
friend.forward();
}
}
친구 :
public class Friend {
//声明陌生实例,值得注意的是,这里用的是private修饰符
private Stranger stranger = new Stranger();
//调用
public void forward(){
stranger.strangerMethod();
}
public void friendMethod() {
System.out.println("这是朋友自己的方法");
}
}
낯선 사람:
public class Stranger {
public void strangerMethod(){
System.out.println("这是陌生人的方法");
}
}
Someone 클래스와 Stranger 클래스가 직접 연결되어 있지 않고 Friend 클래스를 통해 간접적으로 액세스되어 클래스 간의 관계가 줄어들고 클래스 간의 결합이 줄어든다는 것은 어렵지 않습니다.
-
요약하자면
- Dimit의 법칙의 핵심 개념은 클래스 간의 디커플링과 약한 결합으로, 약한 결합 이후에만 클래스의 재 사용률을 높일 수 있습니다.
- 디자인 패턴에는 다음과 같이 Dimit의 법칙을 적용하는 두 가지 디자인 패턴이 있습니다.
- 외관 모드
- 중개 모델