Java 디자인 모드 - 어댑터 모드
정의
모두 두 종류의 어댑터 모드가 있다
대상 어댑터 모드는 이 어댑터 모드에서 어댑터가 패키지의 종류를 수용하는 실례입니다.이런 상황에서 어댑터는 소포 대상을 호출하는 방법을 사용한다.
클래스 어댑터 모드, 이런 어댑터 모드에서 어댑터는 자신이 실현한 클래스를 계승합니다.
해석
하나의 종류의 인터페이스를 고객이 원하는 다른 인터페이스로 바꾸다.어댑터 모드에서는 인터페이스가 호환되지 않아 함께 작업을 할 수 없었던 클래스가 함께 작업을 할 수 있습니다.Gang of Four
기본 개념
고객: 저희 코드를 호출할 대상이 필요합니다.어댑터 모델의 취지: 기존 클래스가 제공하는 서비스를 보존하고 고객에게 인터페이스를 제공하여 고객의 기대를 만족시킨다.
주요 내용
(1) 클래스 어댑터는 고객이 인터페이스에서 원하는 행동을 정의할 때 어댑터 모델을 응용하여 이 인터페이스를 실현하는 클래스를 제공하고 기존의 클래스를 확장하여 하위 클래스를 만들어서 어댑터를 만들 수 있다.
(2) 대상 어댑터 대상 어댑터는 조합을 통해'사용자 기대 인터페이스'를 충족시키는 것 외에 코드 간의 불량 결합도 낮춘다.작업 중에는 객체 어울림을 추천합니다.다음은 객체 어댑터의 UML 그림입니다.
(3) 부족한 어댑터 모델 부족한 어댑터 모델은 특수한 어댑터 모델이지만 이 어댑터는 하나의 추상 클래스에 의해 실현되고 추상 클래스에서 목표 인터페이스에 규정된 모든 방법을 실현해야 하지만 많은 방법의 실현은'평범한'실현이다. 즉, 이런 방법은 모두 빈 방법이다.구체적인 자류는 모두 이 추상류를 계승해야 한다.
3. 코드 예시(Java 디자인 모드의 어댑터 모드와 응용 장면에서 나온 것)
인터페이스 정의
USB.java
public interface USB {
void isUsb();
}
PS2.java
public interface PS2 {
void isPS2();
}
목표 클래스
public class Usber implements USB {
@Override
public void isUsb() {
System.out.println("USB ");
}
}
1. 클래스 어댑터
상속을 통해 적합한 기능 제공
Adapter1.java
public class Adapter1 extends Usber implements PS2 {
@Override
public void isPS2() {
isUsb();
}
}
테스트 클래스 Test.java
public class Test {
public static void main(String[] args) {
PS2 ps2 = new Adapter1();
System.out.print("PS2 , :");
ps2.isPS2();
}
}
출력 결과 PS2 커넥터 적합, 출력: USB 커넥터
2. 객체 어댑터
조합을 통해 적합한 기능 제공
Adapter2.java
public class Adapter2 implements PS2{
private USB usb;
public Adapter2(USB usb) {
this.usb = usb;
}
@Override
public void isPS2() {
usb.isUsb();
}
}
테스트 클래스 Test.java
public class Test {
public static void main(String[] args) {
PS2 ps2_1 = new Adapter2(new Usber());
System.out.print("PS2 , :");
ps2_1.isPS2();
}
}
출력 결과 PS2 커넥터 적합, 출력: USB 커넥터
3. 기본 어댑터
장면 1. 인터페이스에서 실현해야 할 모든 방법을 규정했다. 그러나 이 인터페이스를 실현해야 하는 구체적인 유형은 그 중의 몇 가지 방법만 사용했고 다른 방법은 모두 소용이 없었다.
만약 우리가 인터페이스 Funcs를 가지고 있다면, 그 중에서 N 여러 방법을 정의할 것이다
public interface Funcs {
void a();
void b();
void c();
void d();
void e();
void f();
}
그러나 실현 클래스는 일부 방법(a(), f() 방법이 필요하다고 가정)만 실현하면 된다. 이때 우리는 중간 클래스를 정의하여 인터페이스Funcs를 실현할 수 있다.
public abstract class Adapter3 implements Funcs {
@Override
public void a() {
}
@Override
public void b() {
}
@Override
public void c() {
}
@Override
public void d() {
}
@Override
public void e() {
}
@Override
public void f() {
}
}
구현 클래스는 이 Adapter 3 클래스를 상속하고 원하는 방법을 선택하여 구현하면 됩니다.
public class MyClass extends Adapter3 {
@Override
public void a() {
super.a();
//
}
@Override
public void f() {
super.f();
//
}
}
테스트 클래스
public class Test {
public static void main(String[] args) {
Funcs funcs = new MyClass();
funcs.a();
funcs.f();
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.