자바 어댑터 모드
최근에 저는 Java 기본 사항을 배우고 있으며 어댑터를 학습 할 때 많은 의문이 있습니다. 온라인으로 정보를 검색하고 어댑터에 대한 많은 정보를 찾았지만이 기사는 좋습니다. 여기에 기록이 있습니다. 필요한 것을 읽을 수 있습니다.
어댑터 패턴은 한 클래스의 인터페이스를 클라이언트가 기대하는 다른 인터페이스로 변환하여 원래 인터페이스가 일치하지 않고 함께 작동 할 수없는 두 클래스가 함께 작동 할 수 있도록하는 것입니다. 기능적으로 말하면, 이러한 인터페이스와 호환되지 않는 클래스는 일반적으로 동일하거나 유사한 기능을 갖습니다. 일반적 으로이 클래스의 인터페이스를 수정하여 이러한 종류의 인터페이스 비 호환성을 해결하지만 응용 프로그램의 원래 인터페이스를 수정하지 않거나 객체의 소스 코드가 전혀없는 경우 어댑터 모드가 편리합니다.
어댑터의 장점 :
1. 대상 클래스와 어댑터 클래스를 분해합니다
2. 클래스의 투명성과 재사용 성을 높이고, 클라이언트 클래스에 투명한 어댑터 클래스의 특정 구현을 캡슐화하고 어댑터의 재사용 성을 향상시킵니다.
3. 유연성과 확장은 매우 우수하며 개방 및 폐쇄의 원리를 준수합니다.
어댑터에 관련된 역할에는 다음이 포함됩니다.
대상 : 클라이언트가 사용하는 특정 인터페이스를 정의합니다.
클라이언트 : 대상 인터페이스를 사용하여 대상 인터페이스와 일치하는 객체와 협력하십시오.
Adaptee : 적응 해야하는 기존 인터페이스.
어댑터 : Adaptee의 인터페이스를 Target의 인터페이스로 변환 할 책임이 있습니다. 어댑터는 콘크리트 클래스이며,이 패턴의 핵심입니다.
어댑터는 클래스 어댑터와 객체 어댑터의 두 가지 유형으로 나뉩니다.
클래스 어댑터
소위 클래스 어댑터는 어댑터 어댑터를 상속하고 대상 인터페이스 대상을 구현하는 어댑터 어댑터를 나타냅니다. Java의 단일 상속 이므로이 어댑터는 상속 어댑터 어댑터 만 제공 할 수 있습니다. 코드는 다음과 같습니다.
어댑티
package com.bluemsun.classadapter; 공개 클래스 사람 {private int id; 개인 문자열 이름; / *** 사람은 지금만 영어를 할 수 있습니다*/ public void sayenglish () {System.out.println ( "사람은 영어를 말할 수 있습니다!"); } /*** 세터 생략, 게터. */}대상 인터페이스 (대상)
com.bluemsun.classAdapter;/*** 패키지는 목표에 따라 영어, 프랑스어 및 일본어를 할 수 있어야합니다. 그러나 이제 사람은 영어 만 할 수 있습니다 * @author 관리자 * */public interface target_person {void sayenglish (); void sayfrench (); void sayjapanese ();}어댑터
package com.bluemsun.classAdapter;/*** 클래스 어댑터는 사람을 상속 받기 때문에, Java는 단일로만 상속 될 수 있으므로이 어댑터는 개인 클래스 만 제공 할 수 있습니다. saysfrench () {system.out.println ( "프랑스어를 말할 수 있습니다!"); } @override public void sayjapanese () {System.out.println ( "사람은 일본인을 말할 수 있습니다!"); }}고객
package com.bluemsun.classadapter; public class test {public static void main (String [] args) {target_person person = new adapter_person (); person.sayenglish (); person.sayfrench (); person.sayjapanese (); }}위의 몇 가지 간단한 코드는 클래스 어댑터의 역할을 보여줍니다. 처음에 말했듯이,이 어댑터 어댑터는 사람 클래스 만 제공 할 수 있습니다. 현재 많은 수업에 적응 해야하는지 궁금 할 것입니다. 각 수업에 적응 해야하는 어댑터를 작성해야합니까? 더 유연한 방법이 있습니까? 대답은 : 예! 이것은 우리가 아래에서 이야기하는 객체 어댑터입니다.
객체 어댑터
간단히 말해서 소위 객체 어댑터는 어댑터가 대상 인터페이스를 구현하지만 적응 해야하는 클래스를 상속하지 않음을 의미합니다. 대신, 어댑터 생성자를 통과시켜 적응합니다. 코드는 다음과 같습니다. (Target, Adaptee는 위와 동일)
어댑터
패키지 com.bluemsun.objectDapter; import com.bluemsun.classadapter.person; import com.bluemsun.classadapter.target_person;/** * 객체 어댑터, 객체 어댑터는 클래스 어댑터와 달리 대상에 여러 소스를 적응시킬 수 있습니다. 사람; // 생성자 공개 adapter_person (개인) {this.person = person; } // 대상 인터페이스에서 SayEnglish ()를 구현합니다. } // 인터페이스에서 다른 메소드를 구현 @override public void sayfrench () {System.out.println ( "Person Can Say French!"); } @override public void sayjapanese () {System.out.println ( "사람은 일본인을 말할 수 있습니다!"); }}고객
package com.bluemsun.objectdapter; import com.bluemsun.classadapter.person; import com.bluemsun.classadapter.target_person; public static void main (String [] args) {target_person person = new adapter_person (new person ()); person.sayenglish (); person.sayfrench (); person.sayjapanese (); }}객체 어댑터는 적응으로 여러 클래스에 적응할 수 있습니다. 어댑터 생성자에 적응으로 다른 클래스를 전달하십시오. 유연성.
클래스 어댑터의 장점 :
1. 어댑터 클래스는 어댑터 클래스의 서브 클래스이므로 어댑터 클래스에서 일부 어댑터 방법을 교체 할 수있어 어댑터를보다 유연하게 만듭니다.
클래스 어댑터의 단점 :
1. 다중 상속을 지원하지 않는 Java 및 C#과 같은 언어의 경우, 최대 하나의 어댑터 클래스는 한 번에 하나 이상의 어댑터 클래스에 적응할 수 있으며 대상 추상 클래스는 클래스가 아닌 인터페이스 일 수 있습니다. 사용에는 특정 제한 사항이 있습니다. 어댑터 클래스에 적응할 수없고 동시에 대상 인터페이스에 서브 클래스에 적응할 수 없습니다.
객체 어댑터의 장점 :
1. 여러 다른 어댑터를 동일한 대상에 적응시킵니다. 즉, 동일한 어댑터는 어댑터 클래스와 서브 클래스를 대상 인터페이스에 적용 할 수 있습니다.
객체 어댑터의 단점 :
1. 클래스 어댑터 모드와 비교하여 어댑터 클래스를 교체하는 것은 쉽지 않습니다.
읽어 주셔서 감사합니다. 도움이되기를 바랍니다. 이 사이트를 지원 해주셔서 감사합니다!