C\#디자인 모드 시리즈 튜 토리 얼-어댑터 모드
하나의 종류의 인 터 페 이 스 를 고객 이 원 하 는 다른 인터페이스 로 바꾸다.Adapter 모드 는 인터페이스 가 호 환 되 지 않 아 함께 일 할 수 없 었 던 클래스 들 을 함께 일 할 수 있 게 합 니 다.
2.해결 하 는 문제
즉,Adapter 모드 는 인터페이스 가 호 환 되 지 않 아 함께 일 할 수 없 었 던 클래스 들 을 함께 일 할 수 있 게 합 니 다.
3.모드 속 캐릭터
3.1 목표 인터페이스(Target):고객 이 기대 하 는 인터페이스.목 표 는 구체 적 이거 나 추상 적 인 유형 일 수도 있 고 인터페이스 일 수도 있다.
3.2 어 울 리 는 클래스(Adaptee)가 필요 합 니 다.어 울 리 는 클래스 나 어 울 리 는 클래스 가 필요 합 니 다.
3.3 어댑터(Adapter):적합 한 대상 을 포장 하여 원 인 터 페 이 스 를 목표 인터페이스 로 전환한다.
4.패턴 판독
주:GoF 의 디자인 모델 에서 어댑터 모드 에 대해 두 가지 유형,클래스 어댑터 모드 와 대상 어댑터 모드 를 말 했 습 니 다.클래스 어댑터 모드 는 다 중 계승 을 통 해 하나의 인터페이스 가 다른 인터페이스 와 일치 하기 때문에 C\#,자바 등 언어 는 다 중 계승 을 지원 하지 않 기 때문에 대상 어댑터 만 소개 합 니 다.
4.1 어댑터 모드 의 아 날로 그
4.2 어댑터 모드 의 코드 구현
/// <summary>
///
/// </summary>
public class Target
{
/// <summary>
/// virtual
/// </summary>
public virtual void Request()
{
Console.WriteLine("This is a common request");
}
}
/// <summary>
///
/// </summary>
public class Adaptee
{
public void SpecificRequest()
{
Console.WriteLine("This is a special request.");
}
}
/// <summary>
///
/// </summary>
public class Adapter:Target
{
// Adeptee
private Adaptee adaptee = new Adaptee();
/// <summary>
/// , Request() , SpecificRequest()
/// </summary>
public override void Request()
{
adaptee.SpecificRequest();
}
}
4.3 클 라 이언 트 코드
class Program
{
static void Main(string[] args)
{
// , Target Request()
Target target = new Adapter();
target.Request();
Console.Read();
}
}
실행 결과5.모델 총화
5.1 장점
5.1.1 어댑터 를 통 해 클 라 이언 트 는 같은 인 터 페 이 스 를 호출 할 수 있 기 때문에 클 라 이언 트 에 게 투명 하 다.이렇게 하 는 것 이 더욱 간단 하고 직접적 이 며 치밀 하 다.
5.1.2 기 존의 유형 을 재 활용 하여 기 존 유형 과 재 활용 환경 에 대한 요구 가 일치 하지 않 는 문 제 를 해결 했다.
5.1.3 목표 클래스 와 어댑터 클래스 를 결합 시 키 고 어댑터 클래스 를 도입 하여 기 존의 어댑터 클래스 를 다시 사용 하 며 기 존 코드 를 수정 하지 않 아 도 됩 니 다.
5.1.4 하나의 대상 어댑터 는 여러 개의 서로 다른 어댑터 류 를 같은 목표 에 맞 출 수 있다.즉,같은 어댑터 는 어댑터 류 와 그의 하위 류 를 모두 목표 인터페이스 에 맞 출 수 있다.
5.2 단점
대상 어댑터 의 경우 어댑터 교체 의 실현 과정 이 복잡 하 다.
5.3 필드 적용
5.3.1 시스템 은 기 존의 종 류 를 사용 해 야 하 는데 이런 종류의 인 터 페 이 스 는 시스템 의 인터페이스 에 부합 되 지 않 는 다.
5.3.2 서로 에 게 큰 관련 이 없 는 일부 유형 을 만 들 려 면 앞으로 도 입 될 수 있 는 유형 과 함께 일 하 는 것 을 포함한다.
5.3.3 두 가지 유형 이 하 는 일 은 같 거나 비슷 하지만 서로 다른 인 터 페 이 스 를 가 질 때.
5.3.4 낡은 시스템 개발 유형 은 일부 기능 을 실 현 했 지만 클 라 이언 트 는 다른 인터페이스의 형식 으로 만 접근 할 수 있 지만 우 리 는 기 존의 유형 을 수 동 으로 변경 하 는 것 을 원 하지 않 는 다.
5.3.5 제3자 구성 요 소 를 사용 합 니 다.구성 요소 인터페이스 정 의 는 자신 이 정의 한 것 과 다 르 기 때문에 자신의 인 터 페 이 스 를 수정 하고 싶 지 않 지만 제3자 구성 요소 인터페이스의 기능 을 사용 해 야 합 니 다.
6.어댑터 적용 예시
6.1 ADO.NET 을 사용 한 개발 자 들 은 모두 DataAdapter 를 사용 한 적 이 있 을 것 이다.이것 은 바로 DataSet 과 데이터 소스 간 의 어댑터 이다.DataAdapter 는 Fill 과 Update 를 매 핑 하여 이 어댑터 를 제공 합 니 다.
6.2 핸드폰 전원 어댑터
이상 이 바로 본문의 전체 내용 입 니 다.여러분 께 참고 가 될 수 있 기 를 바 랍 니 다.여러분 들 도 저 희 를 많이 응원 해 주시 기 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 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에 따라 라이센스가 부여됩니다.