Java의 어댑터 패턴(Adapter)이란 무엇입니까? 어댑터 패턴(자세한 설명)
이 기사에서 제공하는 내용은 Java의 어댑터 패턴(Adapter)이 무엇인지입니다. 어댑터 패턴(자세한 설명) 도움이 필요한 친구들이 참고할 수 있기를 바랍니다.
목적: 클라이언트의 요구에 맞게 소스 유형을 대상 유형에 맞게 조정합니다. 여기서는 대상 인터페이스의 호출자를 클라이언트로 간주합니다.
사용 시나리오: 필요 소스 유형에서 대상 유형으로의 유형 변환
전제 조건: 기존 클라이언트
//Client 一个调用目标接口的方法 Class ClientInvoking { static void invoke(TargetInterface target) { String value = target.getMark(); System.out.println(value); } }
일반적으로 사용되는 여러 모드
모드 1: 대상 인터페이스가 존재하며 기존 메소드가 있습니다
//目标接口 public interface TargetInterface { public String getMark(); public String getInfo(); }
//已有类及方法 public class ExistClass { public String sayHello() { return "Hello"; } public String sayWorld() { return "World"; } }
ExistClass가 반환한 문자열이 클라이언트가 사용해야 하는 문자열이라고 가정하지만 클라이언트가 필요로 하는 것은 TargetInterface 유형 개체를 통해 문자열을 얻는 것이므로 기존 클래스를 조정할 수 있는 방법을 찾아야 합니다. 클라이언트의 요구를 충족합니다. 이 모드에는 두 가지 애플리케이션 솔루션이 있습니다.
구성표 1. 클래스 어댑터 모드
//适配器 public class ClassAdapter extends ExistClass implements TargetInterface { public int getMark() { String value = this.sayHello(); return value; } public int getInfo() { String value = this.sayWorld(); return value; } }
//客户端调用 TargetInterface target = new ClassAdapter(); ClientInvoking.invoke(target);
Java 인터페이스 개념에서 ClassAdapter가 TargetInterface의 구현 클래스임을 알 수 있습니다. 클라이언트의 요구에 맞게 위쪽으로 TargetInterface 유형으로 변환됩니다.
솔루션 2. 개체 어댑터 패턴
//适配器 public class ClassAdapter implements TargetInterface { private ExistClass exist; public ClassAdapter(ExistClass existClass) { this.exist = existClass; } public int getMark() { String value = exist.sayHello(); return value; } public int getInfo() { String value = exist.sayWorld(); return value; } }
//客户端调用 TargetInterface target = new ClassAdapter(new ExistClass()); ClientInvoking.invoke(target);
이 솔루션은 클래스 어댑터 패턴과 유사하지만 상속을 사용하지 않고 보다 유연하고 확장 가능한 개체 보유 방법을 사용한다는 점만 다릅니다.
모드 2: 대상 인터페이스는 없지만 대상 클래스가 있고 기존 메소드가 있습니다.
먼저 전제 조건에서 다음과 같이 클라이언트를 변환합니다.
Class ClientInvoking { static void invoke(TargetClass target) { String value = target.getMark(); System.out.println(value); } }
변환 후 호출 이 메소드에는 TargetClass 클래스의 객체가 매개변수로 필요합니다. 다음은 대상 클래스와 기존 클래스입니다. 클라이언트의 콘텐츠가 오래되었으므로 클라이언트의 요구 사항에 맞게 ExistClass를 조정할 방법을 찾아야 합니다.
//目标类 public class Class { public String getMark() { return "yes"; } public String getInfo() { return "no"; } }
//已有类及方法 public class ExistClass { public String sayHello() { return "Hello"; } public String sayWorld() { return "World"; } }
이 모드에서는 두 개의 클래스가 설계되고 마지막으로 Java의 단일 코드에 따라 상향 변환이 수행됩니다. 상속 메커니즘에서는 객체를 보유하는 형태, 즉 객체 어댑터 패턴으로만 전달할 수 있습니다.
모드 3: 기본 어댑터 모드
이 모드에는 명시적인 대상 유형이 없고 소스 유형만 필요한 이유는 소스 유형이 너무 많은 것을 제공하기 때문입니다. 필요하지 않으므로 어댑터 패턴을 통해 사용자 정의해야 합니다. WindowListener를 예로 들어 설명하겠습니다.
//适配器 public class ClassAdapter extends TargetClass { private ExistClass exist; public ClassAdapter(ExistClass existClass) { this.exist = existClass; } public int getMark() { String value = exist.sayHello(); return value; } public int getInfo() { String value = exist.sayWorld(); return value; } }
//客户端调用 TargetClass target = new ClassAdapter(new ExistClass()); ClientInvoking.invoke(target);
이와 같은 코드는 매우 번거로워 보입니다. 예를 들어 종료 이벤트만 수신하면 되지만 관련 없는 템플릿 코드가 많이 생성되어 코드의 가독성이 떨어집니다. . 이를 고려하여 이를 사용자 정의하고 하나의 인터페이스만 들어보겠습니다.
먼저 인터페이스를 구현하기 위한 추상 클래스를 제공하고 모든 리스너에 대해 빈 구현을 제공한 다음 추상 클래스의 하위 클래스를 사용하여 창을 다시 작성합니다. 닫힌 리스너의 구현인 코드는 다음과 같습니다.
//WindowListener源码 public interface WindowListener extends EventListener { public void windowOpened(WindowEvent e); public void windowClosing(WindowEvent e); public void windowClosed(WindowEvent e); ... }
//添加监听器的例子 Frame frame = new Frame(); frame.addWindowListener(new WindowListener() { @Override public void windowOpened(WindowEvent e) { } @Override public void windowClosing(WindowEvent e) { } @Override public void windowClosed(WindowEvent e) { } ... })
//适配器 public abstract ListenerAdapter implements WindowListener { public void windowOpened(WindowEvent e) {} public void windowClosing(WindowEvent e) {} public void windowClosed(WindowEvent e) {} ... }
이 방법은 인터페이스를 단순화하고 코드의 가독성을 향상시킵니다. 가장 중요한 것은 인터페이스의 사용자 정의를 실현했으며 우리가 관심 있는 작업만 수행할 수 있다는 것입니다.
요약: 위 내용이 이 글의 전체 내용입니다. 모든 분들의 공부에 도움이 되었으면 좋겠습니다. 더 많은 관련 튜토리얼을 보려면 Java 비디오 튜토리얼,
Java 개발 그래픽 튜토리얼, bootstrap 비디오 튜토리얼을 방문하세요!
위 내용은 Java의 어댑터 패턴(Adapter)이란 무엇입니까? 어댑터 패턴(자세한 설명)의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











Java의 Weka 가이드. 여기에서는 소개, weka java 사용 방법, 플랫폼 유형 및 장점을 예제와 함께 설명합니다.

Java의 Smith Number 가이드. 여기서는 정의, Java에서 스미스 번호를 확인하는 방법에 대해 논의합니다. 코드 구현의 예.

이 기사에서는 가장 많이 묻는 Java Spring 면접 질문과 자세한 답변을 보관했습니다. 그래야 면접에 합격할 수 있습니다.

Java 8은 스트림 API를 소개하여 데이터 컬렉션을 처리하는 강력하고 표현적인 방법을 제공합니다. 그러나 스트림을 사용할 때 일반적인 질문은 다음과 같은 것입니다. 기존 루프는 조기 중단 또는 반환을 허용하지만 스트림의 Foreach 메소드는이 방법을 직접 지원하지 않습니다. 이 기사는 이유를 설명하고 스트림 처리 시스템에서 조기 종료를 구현하기위한 대체 방법을 탐색합니다. 추가 읽기 : Java Stream API 개선 스트림 foreach를 이해하십시오 Foreach 메소드는 스트림의 각 요소에서 하나의 작업을 수행하는 터미널 작동입니다. 디자인 의도입니다

Java의 TimeStamp to Date 안내. 여기서는 소개와 예제와 함께 Java에서 타임스탬프를 날짜로 변환하는 방법에 대해서도 설명합니다.

캡슐은 3 차원 기하학적 그림이며, 양쪽 끝에 실린더와 반구로 구성됩니다. 캡슐의 부피는 실린더의 부피와 양쪽 끝에 반구의 부피를 첨가하여 계산할 수 있습니다. 이 튜토리얼은 다른 방법을 사용하여 Java에서 주어진 캡슐의 부피를 계산하는 방법에 대해 논의합니다. 캡슐 볼륨 공식 캡슐 볼륨에 대한 공식은 다음과 같습니다. 캡슐 부피 = 원통형 볼륨 2 반구 볼륨 안에, R : 반구의 반경. H : 실린더의 높이 (반구 제외). 예 1 입력하다 반경 = 5 단위 높이 = 10 단위 산출 볼륨 = 1570.8 입방 단위 설명하다 공식을 사용하여 볼륨 계산 : 부피 = π × r2 × h (4

Spring Boot는 강력하고 확장 가능하며 생산 가능한 Java 응용 프로그램의 생성을 단순화하여 Java 개발에 혁명을 일으킨다. Spring Ecosystem에 내재 된 "구성에 대한 협약"접근 방식은 수동 설정, Allo를 최소화합니다.
