개요
인터페이스를 다른 인터페이스로 변환하여 사용자가 원하는 어댑터 모드를 사용하면 인터페이스의 비 호환성으로 인해 함께 작동 할 수없는 클래스가 가능합니다.
두 가지 구현 방법
1. 클래스 어댑터 모드 :
2. 객체 어댑터 모드 :
클래스 어댑터 모드의 UML 다이어그램은 다음과 같습니다.
클래스의 어댑터 패턴은 적응 된 클래스의 API를 대상 클래스의 API로 변환합니다.
위 그림에서 디자인 된 문자는 다음과 같습니다.
대상 : 이것은 당신이 찾고있는 인터페이스입니다.
소스 역할 (Adapee) : 이제 적응하는 데 필요한 인터페이스.
어댑터 역할 (어댑터) :이 모드의 핵심이며 어댑터는 소스 인터페이스를 대상 인터페이스로 변환합니다.
Code example:
인터페이스 대상 {void method1 (); void method2 (); //이 메소드를 얻고 싶습니다} // 소스 클래스에는 메소드에 메소드가 없습니다. 클래스 adaptee {public void method1 () {system.out.println ( "method1"); }} 클래스 어댑터 확장 Adaptee implements target {@override public void method2 () {system.out.println ( "this is target method"); }} public class maintest {public static void main (String arg []) {target target = new 어댑터 (); 대상 .method2 (); }} 물체 어댑터 모드의 UML 다이어그램은 다음과 같습니다.
핵심 아이디어는 클래스의 어댑터 모드와 동일합니다. 어댑터 클래스 만 변경하고 어댑터 클래스를 상속하지는 않지만 Adaptee 클래스에 대한 참조를 보유합니다. 코드는 다음과 같습니다.
인터페이스 대상 {void method1 (); void method2 ();} class adaptee {public void method1 () {system.out.println ( "method1"); }} 클래스 어댑터 구현 대상 {private adaptee adaptee; 공개 어댑터 (Adaptee Adaptee) {this.adaptee = adaptee; } @override public void method2 () {system.out.println ( "이것은 대상 방법"); } @override public void method1 () {// todo 자동 생성 메소드 stub adaptee.method1 (); }} public class maintest {public static void main (String arg []) {target target = new 어댑터 (new adaptee ()); 대상 .method2 (); }} 어댑터 모드의 장점과 단점 :
더 나은 재사용 성과 더 나은 확장 성. 시스템은 기존 클래스를 사용해야하며 이러한 인터페이스는 시스템의 요구를 충족하지 않으므로 이러한 기능은 어댑터 모드를 통해 더 잘 재사용 할 수 있습니다. 어댑터 기능을 구현할 때는 시스템의 기능을 자연스럽게 확장하기 위해 직접 개발 한 기능을 호출 할 수 있습니다.
단점 : 어댑터를 너무 많이 사용하면 시스템을 매우 지저분하고 전반적으로 파악하기가 어렵습니다.
위는이 기사의 모든 내용입니다. 모든 사람의 학습에 도움이되기를 바랍니다. 모든 사람이 wulin.com을 더 지원하기를 바랍니다.