인터페이스 분리 원리 및 디자인 패턴의 6 가지 원칙에 대한 Dimit의 규칙에 대한 자세한 설명

디자인 패턴의 6 가지 원칙 중 하나-인터페이스 격리 원칙 및 Dimit의 규칙에 대한 자세한 설명

1. 인터페이스 분리 원칙 (ISP)

  • 개념

    인터페이스 격리의 원칙을 분리하기 전에 먼저 " 接口"의 개념을 명확히해야합니다 . 인터페이스에는 두 가지 유형이 있습니다.

    1. 강도 인터페이스

      Java에서 new를 통해 객체를 생성하는 것은 특정 유형의 사물에 대한 메서드 특성에 대한 설명이며 이는 논리적 추상화입니다.

    2. 클래스 인터페이스

      Java의 Interface키워드 엄격하게 정의 된 인터페이스 (예 : java.lang.Runtime은 스레드 인터페이스)

    인터페이스 격리 원칙에는 두 가지 정의가 있습니다.

    1. 클라이언트는 필요하지 않은 인터페이스에 의존해서는 안됩니다.
    2. 클래스 간의 종속성은 가장 작은 인터페이스에서 설정되어야합니다.
  • 함유량

    인터페이스는 애플리케이션 시나리오를 격리하고 호출자에게 필요한 메소드 만 제공하며 불필요한 메소드를 보호합니다.

    예:

    전자 상거래 시스템에는 주문이 있고 사용자 포털, 외부 시스템 및 관리 플랫폼에서 사용되며 세 곳에서 사용되는 방법이 다릅니다. 다음 코드를 통해 해결 방법을 살펴 보겠습니다.

    사용자 포털 애플리케이션 인터페이스 :

    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 클래스가 위의 세 가지 인터페이스를 통해 서로 다른 인터페이스를 통해 서로 다른 사용자를 격리 할 수 ​​있음을 찾는 것은 어렵지 않습니다.

  • 요약하자면

    1. 인터페이스는 하나의 모듈 또는 비즈니스 로직 만 제공합니다.
    2. 비즈니스에 필요한 공개 방법 만 유지
    3. 오염 된 인터페이스를 수정하십시오. 수정 위험이 높으면 변환 처리에 어댑터 모드를 사용할 수 있습니다 (나중에 업데이트 될 예정 임).
    4. 인터페이스의 디자인은 상황에 따라 다르므로 도그마는 복사 할 수 없습니다.
    5. 인터페이스를 디자인 할 때 신중한 계획이 필요합니다. 디자인 과정에서 인터페이스의 세분화를 결정하기위한 더 많은 경험과 시도가 이루어져야합니다. 인터페이스의 세분화가 너무 작 으면 인터페이스 수가 급격히 증가하고 개발의 어려움이 증가합니다. 인터페이스의 세분성이 크면, 개발 유연성이 떨어지고 맞춤형 서비스를 제공 할 수 없습니다., 또한 프로젝트에 예상치 못한 위험을 초래합니다.

2. 데메테르의 법칙 (LoD)

  • 개념

    Dimit의 법칙은 LKP (Least Knowledge Principle) 라고도합니다 . 평신도 의 용어로 객체는 다른 객체에 대해 가능한 한 적게 알아야합니다.

    표현이 많고 가장 대표적인 표현은 다음과 같습니다.

    1. 당신의 직접 친구 대응도
    2. "낯선 사람"에게 말하지 마세요
    3. 각 소프트웨어 단위는 다른 단위에 대한 최소한의 지식을 가지고 있으며이 이해는이 단위와 밀접하게 관련된 소프트웨어 단위로 제한됩니다.
  • 함유량

여기에 사진 설명 삽입

다음으로 샘플 코드는 위 그림의 호출 관계를 설명하는 데 사용됩니다.

어떤 사람:

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 클래스를 통해 간접적으로 액세스되어 클래스 간의 관계가 줄어들고 클래스 간의 결합이 줄어든다는 것은 어렵지 않습니다.

  • 요약하자면

    1. Dimit의 법칙의 핵심 개념은 클래스 간의 디커플링과 약한 결합으로, 약한 결합 이후에만 클래스의 재 사용률을 높일 수 있습니다.
    2. 디자인 패턴에는 다음과 같이 Dimit의 법칙을 적용하는 두 가지 디자인 패턴이 있습니다.
      • 외관 모드
      • 중개 모델

추천

출처blog.csdn.net/weixin_44829930/article/details/109774568