> Java > java지도 시간 > Java 어댑터 패턴을 이해하고 사용하는 방법은 무엇입니까?

Java 어댑터 패턴을 이해하고 사용하는 방법은 무엇입니까?

PHPz
풀어 주다: 2023-04-23 09:19:14
앞으로
1443명이 탐색했습니다.

1. 어댑터 모드란 무엇인가요?

사실 모든 사람이 세 단어 어댑터에 대해 잘 알고 있을 것입니다. Apple의 iPhone은 더 이상 충전 플러그를 제공하지 않습니다. 상자에 데이터 케이블이 하나만 있기 때문에 이 데이터 케이블만 사용하여 220V에 연결할 수 없습니다. .보드 위에서 충전이 되기 때문에 보드를 휴대폰에 연결하려면 어댑터를 구입해야 합니다.

실제로 개발해야 할 특정 비즈니스 기능을 가진 구성 요소가 기존 구성 요소 라이브러리에 이미 존재하지만 이러한 구성 요소가 다시 사용되는 경우 현재 시스템의 인터페이스 사양과 호환되지 않는 경우가 소프트웨어 설계에서도 발생할 수 있습니다. - 개발 비용이 매우 높으므로 어댑터 모드를 사용하면 이러한 문제를 잘 해결할 수 있습니다.

2. 어댑터 패턴의 정의

어댑터 패턴: 인터페이스가 호환되지 않아 함께 작동할 수 없는 클래스가 함께 작동할 수 있도록 클래스의 인터페이스를 고객이 원하는 다른 인터페이스로 변환합니다.

어댑터 패턴은 클래스 구조 패턴과 객체 구조 패턴의 두 가지 유형으로 나누어집니다. 전자는 후자보다 클래스 간 결합도가 높으며 프로그래머가 기존 컴포넌트 라이브러리에서 관련 컴포넌트의 내부 구조를 이해해야 합니다. 그래서 응용 프로그램은 상대적으로 적습니다.

3. 어댑터 패턴의 장점과 단점

장점:

  • 클라이언트는 어댑터를 통해 대상 인터페이스를 투명하게 호출할 수 있습니다.

  • 기존 클래스를 재사용하므로 프로그래머는 원본 코드를 수정하거나 기존 코드를 재사용할 필요가 없습니다. 클래스 어댑터 클래스

  • 는 대상 클래스와 어댑터 클래스를 분리하여 대상 클래스와 어댑터 클래스 간의 인터페이스 불일치 문제를 해결합니다

  • 많은 비즈니스 시나리오에서 열기 및 닫기 원칙을 준수합니다

단점:

  • 어댑터 작성 프로세스는 비즈니스 시나리오에 따라 충분히 고려되어야 하며, 이로 인해 시스템이 복잡해질 수 있습니다.

  • 코드 읽기가 더 어려워지고 어댑터를 과도하게 사용하면 코드 가독성이 떨어집니다. 시스템 코드를 지저분하게 만들기

4. 어댑터 패턴의 구조 및 구현

(다음 구조는 인터넷에서 참조됨)

패턴의 구조:

  • Target(Target) 인터페이스: 현재 시스템 비즈니스에서 기대하는 인터페이스는 추상 클래스이거나 Interface

  • Adaptee 클래스: 액세스 및 적용되는 기존 컴포넌트 라이브러리의 컴포넌트 인터페이스입니다.

  • Adapter 클래스: 어댑터의 상속 또는 참조 개체를 통해 적응하고, 어댑터 인터페이스를 대상 인터페이스로 변환하여 고객이 대상 인터페이스 형식으로 어댑터에 액세스할 수 있도록 합니다.

클래스 어댑터 패턴의 구조:

Java 어댑터 패턴을 이해하고 사용하는 방법은 무엇입니까?

The 객체 어댑터 패턴의 구조:

Java 어댑터 패턴을 이해하고 사용하는 방법은 무엇입니까?

5. 어댑터 모드의 코드 구현

A. 조합 방법을 사용하여 어댑터를 구현합니다.

이제 3상 노트북 플러그가 있지만 이제 사용해야 합니다. 충전용 2상 플러그가 필요하므로 이 플러그에는 2상 어댑터가 장착되어 있습니다:

Java 어댑터 패턴을 이해하고 사용하는 방법은 무엇입니까?

3상 소켓 인터페이스:

/**
 * 三相插座接口
 */
public interface ThreePlugIf {

    //使用三相电流供电
    public void powerWithThree();

}
로그인 후 복사

국가 표준 2상 소켓:

/**
 * 国标的二相插座
 */
public class GBTowPlug {
    public void powerWithTwo(){
        System.out.println("使用二相电流供电");
    }
}
로그인 후 복사

노트북:

/**
 * 笔记本
 */
public class NoteBook {

    private ThreePlugIf plug;

    public NoteBook(ThreePlugIf plug){
        this.plug = plug;
    }

    //使用插座充电
    public void charge(){
        plug.powerWithThree();
    }
}
로그인 후 복사

3상 to 2상 소켓 어댑터:

/**
 * 三相转二相的插座适配器
 */

public class TwoPlugAdapter implements ThreePlugIf {


    private GBTowPlug plug;

    public TwoPlugAdapter(GBTowPlug plug) {
        this.plug = plug;
    }

    @Override
    public void powerWithThree() {
        System.out.println("通过转换");
        plug.powerWithTwo();
    }
}
로그인 후 복사

테스트 클래스:

public class Test {

    public static void main(String[] args) {

    GBTowPlug two = new GBTowPlug();
    ThreePlugIf three = new TwoPlugAdapter(two);
    NoteBook nb = new NoteBook(three);
    nb.charge();
	}
}
로그인 후 복사

출력 결과:

변환을 통해 2상 전류 전원 공급 장치 사용

조합 방식을 사용하는 어댑터를 객체 어댑터라고 합니다.

기능:

"adaptee"를 개체로 어댑터에 결합 클래스에서 대상 인터페이스를 수정하고 이를 어댑터에 패키지합니다.

B 상속을 사용하여 어댑터를 구현합니다.

Java 어댑터 패턴을 이해하고 사용하는 방법은 무엇입니까?

어댑터 상속 :

/**
 * 采用继承方式的插座适配器
 */
public class TwoPlugAdapterExtends extends GBTowPlug implements ThreePlugIf{
    @Override
    public void powerWithThree() {
        System.out.println("借助继承适配器");
        this.powerWithTwo();
    }
}
로그인 후 복사

테스트 클래스:

public class Test {

    public static void main(String[] args) {

    GBTowPlug two = new GBTowPlug();
    ThreePlugIf three = new TwoPlugAdapter(two);
    NoteBook nb = new NoteBook(three);
    nb.charge();

    //使用继承方法
    three = new TwoPlugAdapterExtends();
    nb = new NoteBook(three);
    nb.charge();
}
}
로그인 후 복사
출력:

변환에 따라

2상 전류 전원 사용

상속 어댑터의 도움으로

2상 전류 전원 사용

상속 방법을 클래스라고 합니다. 어댑터

특징:

호환되지 않는 인터페이스의 다중 상속을 통해 대상 인터페이스의 일치가 달성되며 단일 클래스는 적응을 구현하는 데 사용됩니다

6 어댑터 패턴의 응용 시나리오

  • 기존에 개발된 시스템에는 새 시스템의 기능 요구 사항을 충족하는 클래스가 있지만 인터페이스가 새 시스템의 인터페이스와 일치하지 않습니다.

  • 타사에서 제공하는 컴포넌트를 사용하지만 컴포넌트 인터페이스 정의가 인터페이스 정의와 다릅니다. 당신이 요구하는 것

위 내용은 Java 어댑터 패턴을 이해하고 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:yisu.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿