[텍스트]
안드로이드에서 가장 중요하면서도 사용하기 어려운 UI 컨트롤은 ListView 리스트 컨트롤인 것으로 알고 있으며, 이를 유연하게 사용하려면 어댑터를 사용해야 하며, 그래서 (향후 활용 가능 여부와 관계없이) Java에서 어댑터 패턴을 배우는 것은 여전히 필요하다고 생각합니다. 결국 Java 언어는 Android 개발에 있어서 매우 중요한 기반입니다.
어댑터 패턴을 완전히 이해하면 배워야 할 지식이 많습니다. 예를 들어 어댑터 패턴에는 클래스 어댑터 패턴과 객체 어댑터 패턴이라는 두 가지 다른 형태가 있습니다. 하지만 초보자로서 오케스트레이션 모드에 대한 기초적인 지식만 익히고 앞으로도 꾸준히 개선해 나가겠습니다. 코딩의 길에서 어려움을 겪는 아이들의 신발이 불평하지 않기를 바랍니다 →_→
1. 어댑터 소개
•클래스의 인터페이스를 다른 인터페이스로 변환합니다. 고객이 원합니다. 어댑터 패턴을 사용하면 호환되지 않는 인터페이스로 인해 함께 작동하지 않는 클래스가 함께 작동할 수 있습니다.
•어댑터 패턴은 최신 Java 프레임워크에서 매우 일반적으로 사용됩니다. 이 모드는 다음 시나리오에 적합합니다. 기존 클래스를 사용하려고 하지만 클래스가 인터페이스 요구 사항을 충족하지 않거나 적합한 인터페이스를 제공하지 않는 다른 클래스에 맞게 조정되는 재사용 가능한 클래스를 만들어야 합니다.
2. 사과와 오렌지의 예
어댑터의 아이디어는 다음과 같은 간단한 예를 통해 설명할 수 있습니다. 이 예에서는 사과에 오렌지를 "맞추려고" 합니다. 아래 그림과 같이:
위 그림의 아래쪽 부분에서 볼 수 있듯이 어댑터에는 Orange 인스턴스가 포함되어 있으며 Apple 클래스를 상속합니다. 주황색 개체가 어댑터에 배치되므로 주황색이 사과처럼 동작합니다. 해당 논리도는 다음과 같습니다.
3. 소켓박스 플러그의 예
위 그림에서 중간에 있는 어댑터를 사용하면 오른쪽 플러그를 왼쪽 소켓에 성공적으로 연결할 수 있습니다.
4. 플러그 어댑터의 코드 구현
/** 适配器模式( Adapter ):将一个类的接口转换成客户希望的另外一个接口。 适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 */ class AdapterDemo{ public static void main(String[] args){ //电源A开始工作 PowerA powerA = new PowerAImpl(); start(powerA); PowerB powerB = new PowerBImpl(); PowerAAdapter pa = new PowerAAdapter(powerB); start(pa); } //定义方法:电源A工作 public static void start(PowerA powerA){ System.out.println("....一些重复的代码....."); powerA.insert(); System.out.println("....一些重复的代码.....\n"); } /** public static void start(PowerB powerB){ System.out.println("....一些重复的代码....."); powerB.connect(); System.out.println("....一些重复的代码....."); } */ } //定义适配器类 class PowerAAdapter implements PowerA{ private PowerB powerB;//要进行适配的接口 public PowerAAdapter(PowerB powerB){ this.powerB = powerB; } //实现接口PowerA,则必然要实现PowerA里面的方法 public void insert(){ powerB.connect(); } } /** 电源A接口 */ interface PowerA{ public void insert(); } class PowerAImpl implements PowerA{ public void insert(){ System.out.println("电源A接口插入,开始工作"); } } /** 电源B接口 */ interface PowerB{ public void connect(); } class PowerBImpl implements PowerB{ public void connect(){ System.out.println("电源B接口已连接,开始工作"); } }
이 예에서는 PowerB가 PowerA의 Start() 메서드에서 코드를 호출하기를 원합니다. 주석 처리된 코드의 23행과 25행을 반복해서 작성하고 싶습니다. 이때 어댑터 모드를 사용할 수 있습니다.
위 코드 설명:
30행: 핵심 코드의 시작이기도 한 어댑터 정의를 시작합니다. > 33행과 34행: 생성 메소드를 통해 PowerB를 전달합니다.
37행: PowerA 인터페이스가 구현되었으므로 PowerA의 insert() 메소드를 구현해야 합니다.
코드 38행: PowerA의 insert() 메소드에서 PowerB의 connect() 메소드를 호출합니다.
다음 코드의 10, 11, 12행은 다음을 의미합니다. PowerB가 생성되면 이를 어댑터 PowerAAdapter에 전달하고 어댑터를 시작한 다음 PowerB가 라인 16, 24 및 18의 코드를 실행합니다.
참고: 16, 24, 18의 순서는 잘못된 것이 아닙니다. 어댑터에서 24번째 코드 줄을 17번째 코드 줄로 대체했기 때문입니다.
작동 효과는 다음과 같습니다.
마찬가지로 PowerA도 PowerB로 사용하려면 다른 어댑터 PowerBAdapter를 정의하여 양방향 어댑터를 달성합니다.
5. 요약
위의 23, 25번째 줄에 주석 처리된 코드는 객체지향적 사고방식에 맞지 않는 반복적인 코드가 많다는 것을 의미합니다. 이제 예를 들어보겠습니다. 우리 프로젝트가 온라인 상태이고 고객이 사용하고 있지만 몇 가지 새로운 요구 사항이 추가되었습니다. 객체 지향에는 OO 원칙이 있습니다. 수정에 가깝습니다(코드가 온라인 상태가 된 후에 코드를 수정하지 마십시오. 그렇지 않으면 연쇄 반응이 발생하여 여기에서 메서드를 호출하는 다른 코드에 문제가 발생할 수 있습니다). 확장에 개방됩니다(신규 자신이 정의한 코드) 이 메소드는 다른 사람이 호출하지 않았습니다. 물론 수정할 수 있습니다. 이때 어댑터를 통해 이러한 반복되는 코드를 줄일 수 있습니다.
6. OO 디자인 원칙
• 인터페이스 지향 프로그래밍(추상화 지향 프로그래밍)
• 조합은 늘리고 상속은 적게 사용
•수정 불가, 확장 가능
개인적으로 이러한 디자인 원칙은 실제로 더 깊은 이해가 필요하므로 여기서는 길게 설명하지 않겠습니다~
위 내용은 이 글의 전체 내용입니다. 모든 분들의 학습에 도움이 되기를 바랍니다. 또한 모든 분들이 PHP 중국어 웹사이트를 지지해 주시길 바랍니다.
Java 디자인 패턴 어댑터 패턴과 관련된 더 많은 글은 PHP 중국어 홈페이지를 주목해주세요!