사실 모든 사람이 세 단어 어댑터에 대해 잘 알고 있을 것입니다. Apple의 iPhone은 더 이상 충전 플러그를 제공하지 않습니다. 상자에 데이터 케이블이 하나만 있기 때문에 이 데이터 케이블만 사용하여 220V에 연결할 수 없습니다. .보드 위에서 충전이 되기 때문에 보드를 휴대폰에 연결하려면 어댑터를 구입해야 합니다.
실제로 개발해야 할 특정 비즈니스 기능을 가진 구성 요소가 기존 구성 요소 라이브러리에 이미 존재하지만 이러한 구성 요소가 다시 사용되는 경우 현재 시스템의 인터페이스 사양과 호환되지 않는 경우가 소프트웨어 설계에서도 발생할 수 있습니다. - 개발 비용이 매우 높으므로 어댑터 모드를 사용하면 이러한 문제를 잘 해결할 수 있습니다.
어댑터 패턴: 인터페이스가 호환되지 않아 함께 작동할 수 없는 클래스가 함께 작동할 수 있도록 클래스의 인터페이스를 고객이 원하는 다른 인터페이스로 변환합니다.
어댑터 패턴은 클래스 구조 패턴과 객체 구조 패턴의 두 가지 유형으로 나누어집니다. 전자는 후자보다 클래스 간 결합도가 높으며 프로그래머가 기존 컴포넌트 라이브러리에서 관련 컴포넌트의 내부 구조를 이해해야 합니다. 그래서 응용 프로그램은 상대적으로 적습니다.
장점:
클라이언트는 어댑터를 통해 대상 인터페이스를 투명하게 호출할 수 있습니다.
기존 클래스를 재사용하므로 프로그래머는 원본 코드를 수정하거나 기존 코드를 재사용할 필요가 없습니다. 클래스 어댑터 클래스
는 대상 클래스와 어댑터 클래스를 분리하여 대상 클래스와 어댑터 클래스 간의 인터페이스 불일치 문제를 해결합니다
많은 비즈니스 시나리오에서 열기 및 닫기 원칙을 준수합니다
단점:
어댑터 작성 프로세스는 비즈니스 시나리오에 따라 충분히 고려되어야 하며, 이로 인해 시스템이 복잡해질 수 있습니다.
코드 읽기가 더 어려워지고 어댑터를 과도하게 사용하면 코드 가독성이 떨어집니다. 시스템 코드를 지저분하게 만들기
(다음 구조는 인터넷에서 참조됨)
패턴의 구조:
Target(Target) 인터페이스: 현재 시스템 비즈니스에서 기대하는 인터페이스는 추상 클래스이거나 Interface
Adaptee 클래스: 액세스 및 적용되는 기존 컴포넌트 라이브러리의 컴포넌트 인터페이스입니다.
Adapter 클래스: 어댑터의 상속 또는 참조 개체를 통해 적응하고, 어댑터 인터페이스를 대상 인터페이스로 변환하여 고객이 대상 인터페이스 형식으로 어댑터에 액세스할 수 있도록 합니다.
클래스 어댑터 패턴의 구조:
The 객체 어댑터 패턴의 구조:
A. 조합 방법을 사용하여 어댑터를 구현합니다.
이제 3상 노트북 플러그가 있지만 이제 사용해야 합니다. 충전용 2상 플러그가 필요하므로 이 플러그에는 2상 어댑터가 장착되어 있습니다:
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(); } }
출력 결과:
조합 방식을 사용하는 어댑터를 객체 어댑터라고 합니다. 기능: "adaptee"를 개체로 어댑터에 결합 클래스에서 대상 인터페이스를 수정하고 이를 어댑터에 패키지합니다. B 상속을 사용하여 어댑터를 구현합니다. 어댑터 상속 :변환을 통해 2상 전류 전원 공급 장치 사용
/** * 采用继承方式的插座适配器 */ 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(); } }
변환에 따라상속 방법을 클래스라고 합니다. 어댑터특징:호환되지 않는 인터페이스의 다중 상속을 통해 대상 인터페이스의 일치가 달성되며 단일 클래스는 적응을 구현하는 데 사용됩니다6 어댑터 패턴의 응용 시나리오2상 전류 전원 사용
상속 어댑터의 도움으로2상 전류 전원 사용
위 내용은 Java 어댑터 패턴을 이해하고 사용하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!