2009-08-23 4 views

답변

7

클래스는 다른 네임 스페이스입니다. 따라서 인터페이스를 사용하여 클래스의 메소드간에 이동하는 데이터에 대한 계약을 적용하거나보다 정확하게 인터페이스 범위를 지정할 수 있습니다.

2

인터페이스가 해당 클래스의 컨텍스트 내에서만 의미가있는 것은 아니며 그렇게 구현하면 분명하게 만들 수 있습니다.

필자는이 구성을 한번 사용해 본적이 없습니다.

3

수업 중에 문제를 해결하려는 경우에 유용합니다.

public class Invoice 
    { 
     public String Print(Type type) 
     { 
      IPrinter printer = null; 
      switch (type) 
      { 
       case Type.HTML: 
        printer = new HtmlPrinter(this); 
        break; 
       case Type.PDF: 
        printer = new PdfPrinter(this); 
        break; 
       default: 
        throw new ArgumentException("type"); 
      } 

      printer.StepA(); 
      printer.StepB(); 
      printer.StepC(); 

      return printer.FilePath; 
     } 


     private interface IPrinter 
     { 
      void StepA(); 
      void StepB(); 
      void StepC(); 
      String FilePath { get; } 
     } 

     private class HtmlPrinter : IPrinter 
     { 
      //Lots of code 
     } 

     private class PdfPrinter : IPrinter 
     { 
      //Lots of code 
     } 

     public enum Type 
     { 
      HTML, 
      PDF 
     } 
    } 
+0

개인적으로 나는 하나의 코드 파일 내에서 많은 클래스의 팬이 아닙니다. 찾기 만하면됩니다. – Paddy

+1

이 경우 의존성 주입을 사용하지 않는 것이 더 좋습니까? 그렇게하면 인쇄 담당자에게 인쇄를 결정하는 방식으로 (IPrinter가 구현되는 한) 인보이스의 복잡성을 줄이는 동시에 HTML 및 PDF보다 많은 유형의 프린터를 허용 할 수 있습니다 (예 : Mocking) . –

관련 문제