C\#디자인 모드 프로 그래 밍 에서 어댑터 모드 의 실현 을 분석 합 니 다.

5632 단어 C#어댑터 모드
실제 소프트웨어 시스템 디자인 과 개발 에서 특정한 업 무 를 완성 하기 위해 제3자 의 라 이브 러 리 를 구 매 하여 개발 을 가속 화해 야 한다.이것 은 응용 프로그램 에서 이미 설 계 된 기능 인터페이스 가 이 제3자 가 제공 하 는 인터페이스 와 일치 하지 않 는 다 는 문 제 를 가 져 왔 다.이러한 인터페이스 가 호 환 되 지 않 는 클래스 가 함께 작업 할 수 있 도록 어댑터 모드 는 인터페이스의 어댑터 메커니즘 을 제공 했다.
어댑터 모델 의 디자인 사상 은 생활 에서 자주 응용 된다.예 를 들 어 우리 가 핸드폰 을 충전 할 때 220 V 전원 에서 직접 충전 할 수 없고 핸드폰 충전기 로 핸드폰 에 필요 한 전압 으로 전환 해 야 정상적으로 충전 할 수 있다.그렇지 않 으 면 충전 을 완성 하지 못 하고 이 충전 기 는 적당 한 역할 을 한다.
1.어댑터 모드 안내
1.1 정의
어댑터 모드 는 하나의 인 터 페 이 스 를 통 해 고객 이 원 하 는 다른 인터페이스 로 전환 하여 인터페이스 가 호 환 되 지 않 아 함께 일 할 수 없 었 던 클래스 들 이 함께 일 할 수 있 도록 하 는 것 이다.
어댑터 는 구조 적 으로 클래스 어댑터 와 대상 어댑터 로 나 눌 수 있다.그 중에서 클래스 어댑터 는 계승 관 계 를 사용 하여 클래스 를 적합 하 게 하고 대상 어댑터 는 대상 이 인용 한 방법 으로 적합 하 게 한다.
C\#클래스 어댑터 를 실현 할 때 Target 은 인터페이스 일 수 밖 에 없습니다.대상 어댑터 를 실현 할 때 Target 은 추상 류 일 수도 있 고 인터페이스 일 수도 있다.
1.2 사용 빈도
2016217154620830.gif (101×20)
2.어댑터 모드 구조
2.1 구조 도
2016217154702639.png (522×285)
2.2 참여 자
어댑터 모드 참여 자:
  • Target:Client 가 사용 하 는 특정 분야 와 관련 된 인터페이스.
  • Client:Target 인터페이스 에 부합 되 는 대상 과 조 화 를 이 루 는 클래스 입 니 다
  • Adaptee:적합 한 인터페이스 가 필요 합 니 다
  • Adapter:어댑터,Adaptee 의 인터페이스 와 Target 인터페이스 가 적합 합 니 다
  • 어댑터 모드 에서 클래스 Adapter 는 어댑터 의 기능 을 실현 합 니 다.클 라 이언 트 는 Adaptee 사이 에 Adapter 를 추가 합 니 다.그러면 클 라 이언 트 는 요청 인 터 페 이 스 를 Target 의 클래스 Adapter 로 보 내 고 Adapter 에서 Adaptee 를 호출 하여 클 라 이언 트 가 Adaptee 를 호출 합 니 다.
    3.유형의 어댑터 모델 실현
    여기 서 생활 속 의 한 예 로 어댑터 모델 의 실현 을 보 여 준다.구체 적 인 장면 은 생활 속 에서 우리 가 산 전기 플러그 는 두 개의 구멍 이지 만 우리 가 산 콘센트 는 세 개의 구멍 만 있다.이때 우 리 는 전기 플러그 가 세 개의 구멍 으로 바 뀌 기 를 바란다.그러면 우 리 는 직접 그것 을 콘센트 에 꽂 을 수 있다.이때 세 개의 구멍 플러그 는 클 라 이언 트 가 기대 하 는 또 다른 인터페이스 이다.자연 두 구멍 의 플러그 는 바로 기 존의 인터페이스 이다.어댑터 모델 은 바로 이런 전환 을 완성 하 는 데 사용 되 고 구체 적 인 실현 코드 는 다음 과 같다.
    
    using System;
    ///                    
    ///            2  ,          3   
    ///                         
    namespace           
    {
      /// <summary>
      ///    ,     2               ,           
      ///              ,         2             
      /// </summary>
      class Client
      {
        static void Main(string[] args)
        {
          //                2      
          IThreeHole threehole = new PowerAdapter();
          threehole.Request();
          Console.ReadLine();
        }
      }
      /// <summary>
      ///       ,              
      /// </summary>
      public interface IThreeHole
      {
        void Request();
      }
      /// <summary>
      ///       ,   ――      
      /// </summary>
      public abstract class TwoHole
      {
        public void SpecificRequest()
        {
          Console.WriteLine("        ");
        }
      }
      /// <summary>
      ///     ,         
      ///                ,               
      /// </summary>
      public class PowerAdapter:TwoHole,IThreeHole
      {
        /// <summary>
        ///            
        /// </summary>
        public void Request()
        {
          //          
          this.SpecificRequest();
        }
      }
    }
    
    위의 코드 에서 알 수 있 듯 이 클 라 이언 트 는 Request 방법(즉 세 개의 구멍 플러그)을 호출 하 기 를 원 하지만 기 존의 클래스(즉 두 개의 구멍 플러그)는 Request 방법 이 없습니다.SpecificRequest 방법(즉 두 개의 구멍 플러그 자체 의 방법)만 있 습 니 다.그러나 어댑터 류(어댑터 는 세 개의 구멍 플러그 인터페이스 와 두 개의 구멍 플러그 류 를 계승 해 야 합 니 다)는 이러한 전환 을 제공 할 수 있 습 니 다.Request 방법의 실현(내부 에서 두 개의 구멍 플러그 를 호출 합 니 다.어댑터 는 하나의 케이스 일 뿐 두 개의 구멍 플러그 를 포장 하고 있 기 때 문 입 니 다(그래 야 전기 가 사용 할 수 있 기 때 문 입 니 다).클 라 이언 트 가 사용 할 수 있 도록 세 개의 구멍 플러그 의 외관 을 외부 에 제공 합 니 다.
    4.대상 의 어댑터 모드
    위 는 모두 유형의 어댑터 모델 에 대한 소개 이지 만 어댑터 모델 은 또 다른 형식 인 대상 의 어댑터 모델 도 있다.여기 서 그의 실현,실현 에 대한 분석 방향 을 구체 적 으로 설명 한다.현재 어댑터 류 는 Two Hole 추상 류 를 계승 할 수 없 으 니(계승 으로 유형의 어댑터 에 속 하기 때문이다).그러나 어댑터 류 는 클 라 이언 트 가 기대 하 는 방법,즉 Request 방법 을 어떻게 든 실현 해 야 하기 때문에 ThreeHole 추상 류 나 IThreeHole 인 터 페 이 스 를 계승 해 야 합 니 다.그러나 어댑터 류 의 Request 방법 은 Two Hole 의 SpecificRequest 방법 을 사용 해 야 합 니 다.계승 할 수도 없고 이 럴 때 계승 할 수도 없다 고 생각 합 니 다.하지만 어댑터 클래스 에서 Two Hole 대상 을 만 들 고 Requst 에서 Two Hole 방법 을 사용 할 수 있 습 니 다.우리 가 분석 한 바 와 같이 대상 의 어댑터 모델 의 실현 은 정식으로 이와 같다.구체 적 인 실현 코드 를 보 여 드 리 겠 습 니 다.
    namespace 대상 어댑터 모드
    
    {
      class Client
      {
        static void Main(string[] args)
        {
          //                2      
          ThreeHole threehole = new PowerAdapter();
          threehole.Request();
          Console.ReadLine();
        }
      }
      /// <summary>
      ///       ,            (Target)  
      /// </summary>
      public class ThreeHole
      {
        //         
        public virtual void Request()
        {
          //            
        }
      }
      /// <summary>
      ///       ,   ――      
      /// </summary>
      public class TwoHole
      {
        public void SpecificRequest()
        {
          Console.WriteLine("        ");
        }
      }
      /// <summary>
      ///     ,        TwoHole ,
      ///      TwoHole  ,              
      /// </summary>
      public class PowerAdapter : ThreeHole
      {
        //           ,       TwoHole    
        public TwoHole twoholeAdaptee = new TwoHole();
        /// <summary>
        ///            
        /// </summary>
        public override void Request()
        {
          twoholeAdaptee.SpecificRequest();
        }
      }
    }
    

    좋은 웹페이지 즐겨찾기