이 기사에서 제공하는 내용은 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!