C\#디자인 모드 프로 그래 밍 에서 어댑터 모드 의 실현 을 분석 합 니 다.
어댑터 모델 의 디자인 사상 은 생활 에서 자주 응용 된다.예 를 들 어 우리 가 핸드폰 을 충전 할 때 220 V 전원 에서 직접 충전 할 수 없고 핸드폰 충전기 로 핸드폰 에 필요 한 전압 으로 전환 해 야 정상적으로 충전 할 수 있다.그렇지 않 으 면 충전 을 완성 하지 못 하고 이 충전 기 는 적당 한 역할 을 한다.
1.어댑터 모드 안내
1.1 정의
어댑터 모드 는 하나의 인 터 페 이 스 를 통 해 고객 이 원 하 는 다른 인터페이스 로 전환 하여 인터페이스 가 호 환 되 지 않 아 함께 일 할 수 없 었 던 클래스 들 이 함께 일 할 수 있 도록 하 는 것 이다.
어댑터 는 구조 적 으로 클래스 어댑터 와 대상 어댑터 로 나 눌 수 있다.그 중에서 클래스 어댑터 는 계승 관 계 를 사용 하여 클래스 를 적합 하 게 하고 대상 어댑터 는 대상 이 인용 한 방법 으로 적합 하 게 한다.
C\#클래스 어댑터 를 실현 할 때 Target 은 인터페이스 일 수 밖 에 없습니다.대상 어댑터 를 실현 할 때 Target 은 추상 류 일 수도 있 고 인터페이스 일 수도 있다.
1.2 사용 빈도
2.어댑터 모드 구조
2.1 구조 도
2.2 참여 자
어댑터 모드 참여 자:
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();
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
WebView2를 Visual Studio 2017 Express에서 사용할 수 있을 때까지Evergreen .Net Framework SDK 4.8 VisualStudio2017에서 NuGet을 사용하기 때문에 패키지 관리 방법을 packages.config 대신 PackageReference를 사용해야...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.