"안드로이드 소스 코드 디자인 패턴 분석 및 실제 실습"덕분에 그는 Honghui가 사람들을 돌보는
어댑터 모드는 개발에 매우 유용합니다. 코드의 모든 곳에서 볼 수있는 어댑터에서 판단 할 수 있습니다. 최초의 ListView, GridView 및 최신 RecyclerView에서 우리는 모두 어댑터를 사용해야하며, 최적화 문제와 개발에서 발생할 확률이 높은 장소는 기본적으로 어댑터에서 파생됩니다.
어댑터는 두 개의 양립 할 수없는 파이어 드래곤을 함께 융합시키고 변형을 사용하여 협력 할 수 있도록합니다. 예를 들어, 두 가지 관련없는 유형을 상호 작용하려는 경우가 종종 있습니다. 첫 번째 솔루션은 각 클래스의 인터페이스를 수정하는 것입니다. 그러나 소스 코드가 없거나 응용 프로그램에 대한 해당 인터페이스를 수정하려는 경우이 경우 종종이 두 인터페이스와 호환되는 어댑터를 사용하고 원래 코드를 수정하지 않고 요구를 충족시킵니다.
이미 소프트웨어 시스템이 있고 새로운 제조업체의 클래스 라이브러리와 함께 사용하기를 원하지만이 새로운 제조업체가 설계 한 인터페이스는 이전 제조업체의 인터페이스에 사용되지 않습니다.
기존 코드를 변경 하고이 문제를 해결하고 싶지 않다면 어떻게해야합니까 (그리고 제조업체의 코드를 변경할 수 없음)? 새 공급 업체 인터페이스를 기대하는 인터페이스로 변환하는 클래스 (어댑터)를 작성할 수 있습니다. 이 어댑터는 중개자처럼 작동하여 고객이 발행 한 요청을 공급 업체 클래스가 이해할 수있는 요청으로 변환합니다.
어댑터 모드는 두 가지 유형으로 나눌 수 있습니다.
객체 어댑터 : 좋은 oo 디자인 원칙으로 가득합니다. 객체 조합을 사용하면 어댑터에 인터페이스 및 모든 서브 클래스로 적용 할 수 있습니다. 상속 관계가 없기 때문에 어댑터 방법을 다시 작성할 수는 없지만 어댑터의 메소드를 "되풀이"할 수도 있습니다. 클라이언트와 어댑터는 완전히 관련이 없으며 어댑터 만 어댑터에 대한 참조가 있습니다.
클래스 어댑터 : 상속을 사용하여 어댑터 작업을 달성하십시오. 어댑터 만 인터페이스이며 서브 클래스 인터페이스를 사용할 수 없습니다. 클래스 어댑터가 설정되면 어댑터와 정적으로 관련됩니다. 어댑터는 어댑터의 기본 클래스 역할을하므로 어댑터는 어댑터에 메소드를 다시 작성할 수 있습니다. 클라이언트 코드는 어댑터에 선언 된 코드에 표시됩니다. 클라이언트 코드는 어댑터에 선언 된 코드에 표시됩니다.
정의:
어댑터 패턴은 한 클래스의 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환하므로 원래 인터페이스 불일치로 인해 함께 작동 할 수없는 두 클래스가 함께 작동 할 수 있습니다.
시나리오 사용 :
1. 시스템은 기존 클래스를 사용해야하며 이러한 인터페이스는 시스템의 요구를 충족하지 않습니다. 즉, 인터페이스는 호환되지 않습니다.
2. 향후 소개 될 수있는 일부 수업을 포함하여 서로 관련이없는 일부 클래스와 함께 작업하기 위해 재사용 할 수있는 수업을 만들고 싶습니다.
3. 통합 출력 인터페이스가 필요하며 입력 끝의 유형은 예측할 수 없습니다.
UML 클래스 다이어그램 :
먼저 다음 어댑터를보십시오.
클래스 어댑터는 대상 인터페이스를 구현하고 Adaptee 클래스를 상속하여 인터페이스 변환을 구현합니다. 예를 들어, 대상 인터페이스에는 Operation2가 필요하지만 Adaptee 객체에는 하나의 Operation3 만 있으므로 호환되지 않는 상황이 있습니다. 이 시점에서, Adaptee의 Operation3을 대상이 요구하는 Operation2로 변환하여 호환성을 달성하기 위해 Adapter를 통해 Operation2 함수가 구현됩니다.
대상 : 대상 역할, 즉 당신이 찾고있는 인터페이스입니다. 참고 : 클래스 어댑터 패턴이 여기에서 논의되므로 대상은 클래스가 될 수 없습니다.
Adaptee : 이제 적응 된 인터페이스가 필요합니다.
어댑터 : 어댑터 역할 도이 모드의 핵심입니다. 어댑터는 소스 인터페이스를 대상 인터페이스로 변환합니다. 이 역할은 인터페이스가 될 수는 없지만 특정 클래스 여야합니다.
클래스 어댑터 모드 예 :
본토 전압은 220V이고 휴대폰 전압은 예를 들어 5V입니다.
/** * 전압 클래스 대상 대상 * @Author 관리자 * */공개 인터페이스 전압 {public int getVoltage ();} public class chinavoltage empless 전압 {@override public int getvoltage () {// 대륙 전압은 220 반환 220; }} <pre name = "code">/** * 휴대 전화 클래스, 어댑터 어댑터 클래스 * @author 관리자 * */public class phonevoltage {/** * 휴대 전화 전압은 5v * @return */public int getphonevoltage () {return 5; }}} <pre name = "code">/** * 충전기 어댑터 관리자 * */public class 충전기 확장 전압 전압 {@override public int getvoltage () {return getphonevoltage (); }} public class client {public static void main (String [] args) {chinavoltage vol = new chinavoltage (); System.out.println ( "본토 전압은" + vol.getvoltage ()); // 충전기를 휴대폰에 연결할 때 전압 Chargerr 문자 = New Chargerr (); System.out.println ( "충전기를 통해 변환 된 전압 :" + character.getvoltage ()); }} 실행 결과 :
중국 본토의 전압은 220입니다
충전기를 통해 변환 된 전압 : 5
객체 어댑터 클래스 다이어그램을 살펴 보겠습니다.
다음은 객체 어댑터를 사용하여 Chargerr 클래스를 수정하는 것입니다.
<pre name = "code">/** * 충전기 어댑터 관리자 * */public class Chargerr는 전압 {private phonevoltage phonev; Public Chargerr (PhoneVoltage PhoneV) {this.phonev = 폰 V; } @override public int getVoltage () {return phonev.getphonevoltage (); }}Object Adapter 구현 방법은 객체를 직접 전달하여 어댑터에 적응하고 결합 된 양식을 사용하여 인터페이스 호환성의 효과를 달성합니다. 클래스 어댑터 방법보다 유연합니다. 또 다른 장점은 적응 된 객체의 방법이 노출되지 않는다는 것입니다. 클래스 어댑터는 적응 된 객체를 상속하기 때문에 어댑터 클래스의 기능은 어댑터 클래스에 포함되어있어 어댑터 클래스에 이상한 인터페이스가있어 사용자에게 더 비용 효율적입니다. 따라서 객체 어댑터 모드는 더 유연하고 실용적입니다.
public class client {public static void main (string [] args) {// chinavoltage vol = new chinavoltage (); // system.out.println ( "본토 전압은 :" + vol.getvoltage ()); // 충전기에 연결할 때 전압 (// chargerr); 충전기를 통해 변환 : " + 문자 .getvoltage ()); // 적응 된 phonevoltage phonev = new PhoneVoltage (); Chargerr Charger = New Chargerr (Phonev); System.out.println ( "충전기를 통해 변환 된 전압 :" + Charger.getVoltage ()); } // 작동 결과 : // 충전기를 통해 변환 된 전압 : 5} 요약 :
어댑터 모델의 전형적인 구현은 원래 호환되지 않는 인터페이스를 통합하여 잘 협력 할 수 있도록하는 것입니다. 그러나 실제 개발에서 어댑터 모델에는 유연한 구현도 있습니다. 예를 들어 ListView의 격리 변경으로 인해 전체 UI 아키텍처가 더욱 유연 해지고 변경 사항을 수용 할 수 있습니다. 어댑터 모델은 개발에 널리 사용됩니다.
이점:
더 나은 재사용 성 : 시스템은 기존 클래스를 사용해야하며 이러한 인터페이스는 시스템의 요구를 충족하지 않습니다. 그러면 이러한 기능을 어댑터 모드를 통해 더 잘 재사용 할 수 있습니다.
더 나은 확장 성 : 어댑터 기능을 구현할 때는 시스템의 기능을 자연스럽게 확장하기 위해 직접 개발 한 기능을 호출 할 수 있습니다.
결점:
어댑터를 너무 많이 사용하면 시스템이 지저분하고 파악하기가 어렵습니다. 예를 들어, Chang A 인터페이스는 실제로 B 인터페이스의 구현에 적합합니다. 시스템에 너무 많은 사례가 있다면 재난에 맞지 않습니다. 따라서 필요하지 않은 경우 시스템을 직접 리팩토링하는 대신 어댑터를 사용할 수 있습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.