때로는 개발 과정에서 클라이언트가 요구하는 인터페이스와 제공된 인터페이스가 호환되지 않음을 알 수 있습니다. 특별한 이유로 클라이언트 인터페이스를 수정할 수 없습니다. 이 경우 어댑터 모드가 필요한 기존 인터페이스 및 호환되지 않는 클래스에 적응해야합니다. 어댑터를 사용하면 어댑터의 능력 인 오래된 코드를 수정하지 않고 사용할 수 있습니다.
적응 모드는 기존 인터페이스와 호환되지 않는 클래스 사이에 적응하는 데 사용될 수 있습니다. 이 모드를 사용하는 객체는 새 인터페이스로 다른 객체를 감싸기 때문에 포장지라고도합니다.
표면에서 어댑터 모드는 모양 모드와 매우 유사합니다. 그들은 모두 다른 객체를 감싸고 렌더링하는 인터페이스를 변경해야합니다. 둘의 차이점은 인터페이스를 변경하는 방법입니다. 모양 요소는 추가 옵션을 제공하지 않는 단순화 된 인터페이스를 제공하며 때로는 일반적인 작업을 용이하게하기 위해 일부 가정을 만듭니다. 어댑터는 한 인터페이스를 다른 인터페이스로 변환하여 특정 기능을 걸러 내지 않으며 인터페이스를 단순화하지 않습니다. 클라이언트 시스템 API를 사용할 수없는 경우 어댑터가 필요합니다.
기본 이론
어댑터 모드 : 클라이언트 코드를 수정하지 않고 클라이언트가 요구하는 인터페이스로 인터페이스를 변환하여 호환되지 않는 코드가 함께 작동 할 수 있습니다.
어댑터는 주로 3 가지 역할로 구성됩니다.
(1) 클라이언트 : 인터페이스를 호출하는 클래스
(2) 어댑터 : 클라이언트 인터페이스를 연결하는 데 사용되는 클래스 및 서비스 제공 서비스 제공
(3) 어댑터 : 서비스를 제공하지만 클라이언트 인터페이스 요구 사항과 호환되지 않습니다.
어댑터 모드 구현
1. 가장 쉬운 어댑터
어댑터 모드는 생각만큼 복잡하지 않으므로 가장 간단한 예를 들어 보겠습니다.
클라이언트는 추가 계산 방법을 호출합니다.
var result = 추가 (1,2);
그러나 ADD 메소드를 제공하지 않았으며 동일한 유사한 기능을 가진 합계 메소드를 제공합니다.
함수 합 (v1, v2) {return v1 + v2;}클라이언트 및 서버 수정을 피하기 위해 래퍼 기능을 추가합니다.
함수 추가 (v1, v2) {reutrn sum (v1, v2);}이것은 가장 간단한 어댑터 모드이며, 두 개의 호환되지 않는 인터페이스 사이에 래퍼 메소드를 추가 하고이 방법을 사용하여 두 가지를 연결하여 함께 작동하도록합니다.
2. 실제 적용
프론트 엔드 프레임 워크의 개발로 인해 점점 더 많은 개발자들이 MVVM 프레임 워크를 개발에 사용하기 시작했으며 DOM 요소없이 데이터를 조작 할 필요가 있으며 jQuery는 효과가 줄어 듭니다. 많은 프로젝트는 여전히 JQuery Library 도구 클래스를 나타냅니다. 왜냐하면 JQuery가 제공 한 AJAX를 사용하여 서버에 데이터를 요청해야하기 때문입니다. 프로젝트에서 jQuery의 역할이 Ajax 도구 라이브러리로만 사용된다면 닭을 죽이고 자원 낭비를 유발하는 것과 같은 느낌이 듭니다. 현재 우리는 자체 AJAX 라이브러리를 완전히 캡슐화 할 수 있습니다.
우리가 캡슐화 한 ajax가 함수를 통해 사용된다고 가정합니다.
ajax ({url : '/getdata', type : 'post', datatype : 'json', data : {id : "123"}}). done (function () {})인터페이스 호출 Ajax와 JQuery의 $ .ajax의 차이를 제외하고는 다른 것과 동일합니다.
프로젝트에는 Ajax를 요청하는 많은 장소가 있어야합니다. jQuery를 대체 할 때 $ .Ajax를 하나씩 수정할 수 없습니다. 우리는 무엇을해야합니까? 현재 어댑터를 추가 할 수 있습니다.
var $ = {ajax : 함수 (옵션) {return ajax (옵션); }}이는 이전 코드 및 새로운 인터페이스와 호환되며 기존 코드에 대한 수정을 피하십시오.
요약
어댑터 모드의 원리는 매우 간단합니다. 이는 새 래퍼 클래스를 추가하여 새 인터페이스를 추가하여 이전 코드의 호출에 적응하고 인터페이스를 수정하고 코드를 호출하지 않도록하는 것입니다.
적용 가능한 시나리오 : 많은 코드가 오래된 인터페이스가 있습니다. 이전 코드를 수정하고 새 인터페이스를 교체하지 않기 위해 응용 프로그램 시나리오는 기존 구현 방법에 영향을 미치지 않습니다.
1. 어댑터 모드에 적용 가능한 경우 :
어댑터는 고객 시스템에서 예상되는 인터페이스가 기존 API에서 제공하는 인터페이스와 호환되지 않는 상황에 적합합니다. 어댑터에 적응 한 두 가지 방법은 유사한 작업을 수행해야합니다. 그렇지 않으면 문제가 해결되지 않습니다. 브리지 요소 및 외관 요소와 마찬가지로 어댑터를 만들어 구현에서 추상화를 분리하여 둘을 독립적으로 변경할 수 있습니다.
2. 어댑터 모드 혜택 :
클라이언트 프로그램이 주요 수술없이 맞춤화되지 않은이 클래스를 사용할 수 있도록 기존 클래스의 인터페이스를 새 인터페이스로 감싸십시오.
3. 오케스트레이터 모드의 단점 :
어떤 사람들은 어댑터가 기존 코드를 다시 작성하여 전적으로 피할 수있는 불필요한 오버 헤드라고 생각합니다. 또한 어댑터 모드는 지원 해야하는 새로운 도구 배치도 소개합니다. 기존 API가 아직 형성되지 않았거나 새 인터페이스가 아직 형성되지 않은 경우 어댑터가 항상 작동하지 않을 수 있습니다.
큰 시스템과 레거시 프레임 워크가 포함될 때 장점은 단점보다 더 눈에 띄는 경향이 있습니다.