>Java >java지도 시간 >인터페이스 분리 원칙

인터페이스 분리 원칙

王林
王林원래의
2024-08-25 22:30:33987검색

Interface Segregation Principle

어떠한 클라이언트도 사용하지 않는 방법에 의존하도록 강요해서는 안 됩니다

다양한 출력 장치를 객체로 표현한 사무실 공간의 예를 생각해 보세요

인터페이스 분리 원칙 전:

다기능 인터페이스

/**
 * @ImultiFunction interface has methods related to all output devices present in office space
 * for devices like Printer, Scanner, Fax machines, etc
*/
public interface IMultiFunction {
    public void print();
    public void getPrintSpoolDetails();
    public void scan();
    public void scanPhoto();
    public void fax();
    public void internetFax();
}

위의 공통 인터페이스를 다양한 디바이스에 구현합니다

모든 기능을 갖춘 XeroxWorkCenter 클래스

/**
 * 
 * You must have seen Xerox work station device which has all the features in one like printing, scanning, xerox,
 * fax etc
*/
public class XeroxWorkCenter implements IMultiFunction {

    @Override
    public void print() {
        // real printing code
    }

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    }

    @Override
    public void scan() {
        // read scanning code
    }

    @Override
    public void scanPhoto() {
        // real scan photo code 
    }

    @Override
    public void fax() {
        // real fax code
    }

    @Override
    public void internetFax() {
        // real internet fax code
    }

}

HpPrinterNScanner 클래스에는 인쇄 및 스캔 기능이 있습니다

public class HpPrinterNScanner implements IMultiFunction {

    @Override
    public void print() {
        // real printing code
    }

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    }

    @Override
    public void scan() {
        // read scanning code
    }

    @Override
    public void scanPhoto() {
        // real scan photo code 
    }

    //Since HpPrinterNScanner has only printing and scanning abilities fax() and internetFax() will have empty body
    @Override
    public void fax() {}

    @Override
    public void internetFax() {}

}

CanonPrinter 클래스에는 인쇄 기능만 있습니다

public class CanonPrinter implements IMultiFunction {

    @Override
    public void print() {
        // real printing code
    }

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    }

    //Since the CanonPrinter has only printing ability rest of the method will have an empty body
    @Override
    public void scan() {}

    @Override
    public void scanPhoto() {}

    @Override
    public void fax() {}

    @Override
    public void internetFax() {}

}

ISP 위반 식별 기법

  • Fat 인터페이스 (두 개의 메소드 선언이 많은 인터페이스)
  • 결합력이 낮은 인터페이스(서로 관련될 가능성이 없는 메서드를 갖는 인터페이스)
  • *빈 메소드 구현 *(클래스가 사용하지 않는 메소드를 강제로 구현해야 하는 경우 메소드 구현을 공백으로 남겨둡니다)

인터페이스 분리 후 원칙:

public interface IPrint {
    public void print();
    public void getPrintSpoolDetails();
}
public interface IScan {
    public void scan();
    public void scanPhoto();
}
public interface IFax {
    public void fax();
    public void internetFax();
}
/**
 * 
 * You must have seen the Xerox workstation device which has all the features in one like printing, scanning, xerox, fax, etc.
*/
public class XeroxWorkCenter implements IPrint,IScan,IFax {

    @Override
    public void print() {
        // real printing code
    }

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    }

    @Override
    public void scan() {
        // read scanning code
    }

    @Override
    public void scanPhoto() {
        // real scan photo code ̰
    }

    @Override
    public void fax() {
        // real fax code
    }

    @Override
    public void internetFax() {
        // real internet fax code
    }

}
public class HpPrinterNScanner implements IPrint,IScan {

    @Override
    public void print() {
        // real printing code
    }

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    }

    @Override
    public void scan() {
        // read scanning code
    }

    @Override
    public void scanPhoto() {
        // real scan photo code 
    }
}
public class CanonPrinter implements IPrint {

    @Override
    public void print() {
        // real printing code
    }

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    } 
}

각 인터페이스에는 단일 책임이 있으며 이제 훨씬 더 깔끔해졌습니다.

ISP와 다른 SOLID 원칙과의 관계

단일 책임
인터페이스를 다른 인터페이스로 분리한 후 이제 IPrint, IScan과 같은 모든 인터페이스는 단일 책임을 갖습니다

리스코프 대체
분리로 인해 이제 모든 클래스(인터페이스 구현)가 Liskov 대체를 따릅니다. 모든 하위 유형 또는 구현 클래스가 해당 인터페이스 참조 변수로 대체될 수 있기 때문입니다.

위 내용은 인터페이스 분리 원칙의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
이전 기사:단일 책임 원칙다음 기사:단일 책임 원칙