JavaScript 어댑터 모드 상세 설명
기본 이론
어댑터 모드:하나의 인 터 페 이 스 를 클 라 이언 트 가 필요 로 하 는 인터페이스 로 바 꾸 고 클 라 이언 트 코드 를 수정 하지 않 아 도 되 며 호 환 되 지 않 는 코드 를 함께 작업 할 수 있 습 니 다.
어댑터 는 주로 세 개의 캐릭터 로 구성 되 어 있 습 니 다.
(1)클 라 이언 트:인터페이스 클래스 호출
(2)어댑터:클 라 이언 트 인터페이스 와 서 비 스 를 제공 하 는 인 터 페 이 스 를 연결 하 는 클래스
(3)어댑터:서 비 스 를 제공 하지만 클 라 이언 트 인터페이스 수요 와 호 환 되 지 않 습 니 다.
여기에 두 수의 덧셈 에 관 한 실례 가 하나 있다.
1.먼저 실현 할 수 있 는 두 개의 덧셈 서비스 와 클 라 이언 트 가 있 습 니 다.
(1)먼저 인터페이스 검사 류 를 도입 하여-이 인 터 페 이 스 를 실현 하 는 클래스 가 인터페이스 에서 사용 하 는 방법 을 실현 하 는 지 확인한다.
//(
// Interface.prototype ,
//
//
var Interface=function (name,methods) {//name:
if(arguments.length<2){
alert(" ")
}
this.name=name;
this.methods=[];//
for(var i=0;i<methods.length;i++){
if(typeof methods[i]!="string"){
alert(" ");
}else {
this.methods.push( methods[i]);
}
}
};
Interface.ensureImplement=function (object) {
if(arguments.length<2){
throw new Error(" 2 ")
return false;
}
for(var i=1;i<arguments.length;i++){
var inter=arguments[i];
// Interface
if(inter.constructor!=Interface){
throw new Error(" , Interface ");
}
//
//
for(var j=0;j<inter.methods.length;j++){
var method=inter.methods[j];//
//object[method]
//
if(!object[method]||typeof object[method]!="function" ){//
throw new Error(" ")
}
}
}
}
(2)인터페이스 유사 인터페이스 사용
var InterfaceResult=new Interface("InterfaceResult",["add"]);
(3)서버 의 두 수의 덧셈
function First() {
this.add=function (x,y) {
return x+y;
}
Interface.ensureImplement(this,InterfaceResult);//
}
(4)클 라 이언 트 호출 서버 코드
var first=new First();
alert(first.add(1,2)) ;//3
2.현재 한 가지 요구 가 있 습 니 다.라 이브 러 리 를 바 꿔 야 하지만 클 라 이언 트 의 프로그램 은 큰 변경 을 원 하지 않 습 니 다.(1)똑 같은 인 터 페 이 스 를 계승 하 는 토대 에서 라 이브 러 리 는
function Second() {
this.add=function (numberList) {
//[1,2,3] "1+2+3" eval("1+2+3")
return eval(numberList.join("+"));
}
Interface.ensureImplement(this,InterfaceResult);//
}
이때 우리 가 이 라 이브 러 리 를 사용 해 야 한다 면 클 라 이언 트 가 해 서 는 안 됩 니 다.그러면 이전 호출 방식 을 사용 하 십시오.
var second=new Second();
alert(second.add(1,3));//
클 라 이언 트 의 요구 에 전혀 부합 되 지 않 습 니 다.클 라 이언 트 가 변 하지 않 는 상황 에서 새로운 라 이브 러 리 를 사용 할 수 있 도록 어댑터 모드 를 사용 해 야 합 니 다.현재 인터페이스 에 변화 가 생 겼 습 니 다.클 라 이언 트 가 변 하지 않도록 어댑터 호 환 을 사용 합 니 다.클 라 이언 트 와 새로운 인 터 페 이 스 를 호 환 합 니 다.
(2)어댑터
function ThirdWarpper() {
this.add=function (x,y) {
var arr=new Array();
arr.push(x);
arr.push(y);
return new Second().add(arr);
}
Interface.ensureImplement(this,InterfaceResult);
}
(3)클 라 이언 트 코드
//
var third=new ThirdWarpper();
var result= third.add(1,8);//
alert(result);
위 와 같은 새로운 라 이브 러 리 를 사용 한 그림 은 다음 과 같 습 니 다.총결산
겉으로 볼 때 어댑터 모드 는 외관 모드 와 매우 비슷 하 다.그들 은 모두 다른 대상 을 포장 하고 나타 나 는 인 터 페 이 스 를 바 꿔 야 한다.이들 의 차 이 는 인 터 페 이 스 를 어떻게 바 꾸 느 냐 에 있다.외관 요 소 는 간단 한 인 터 페 이 스 를 보 여 줍 니 다.추가 적 인 선택 을 제공 하지 않 고 흔히 볼 수 있 는 임 무 를 편리 하 게 수행 하기 위해 가정 을 하기 도 합 니 다.어댑터 는 하나의 인 터 페 이 스 를 다른 인터페이스 로 바 꿔 야 한다.어떤 능력 을 걸 러 내지 도 않 고 인 터 페 이 스 를 간소화 하지 도 않 는 다.
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[2022.04.19] 자바스크립트 this - 생성자 함수와 이벤트리스너에서의 this18일에 this에 대해 공부하면서 적었던 일반적인 함수나 객체에서의 this가 아닌 오늘은 이벤트리스너와 생성자 함수 안에서의 this를 살펴보기로 했다. new 키워드를 붙여 함수를 생성자로 사용할 때 this는...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.