javascript 디자인 모델 C 직책 체인 모델 원리 와 용법 사례 분석
소개:한 소프트웨어 시스템 에서 어떤 요청 을 처리 할 수 있 는 대상 이 한 명 이 아 닌 경우 가 많다.예 를 들 어 네트워크 요청 이 오 면 대상 이 request Body 를 분석 해 야 하고 대상 이 요청 헤드 를 분석 해 야 하 며 대상 이 대응 하 는 contrller 를 실행 해 야 합 니 다.모든 대상 이 요청 에 따라 자신의 임 무 를 완성 하도록 층 층 이 전달 해 달라 고 요청 한 다음 요청 을 다음 처리 프로그램 에 전달 합 니 다.약간 미들웨어 느낌 아니 야?
정의:직책 체인 은 요청 발송 자 와 수신 자가 결합 하지 않도록 여러 대상 이 요청 을 받 을 수 있 도록 하 는 것 입 니 다.이 대상 들 을 하나의 체인 으로 연결 하고 대상 이 처리 할 때 까지 체인 을 따라 요청 을 전달 합 니 다.직책 체인 모델 은 대상 행위 형 모델 이다.
장면:우 리 는 계속 원 을 그리고 우 리 는 두 조 의 예 를 준비 했다.
예시:
var Circle = function(){
this.radius = 0;
this.drawByRadius = function(radius){
if(radius < 5){
this.drawVerySmalCircle();
}else if(radius < 10){
this.drawSmalCircle();
}else if(radius < 15){
this.drawMediumCircle();
}else if(radius < 20){
this.drawBigCircle();
}else{
this.drawVeryBigCircle();
}
}
this.drawVerySmalCircle = function(){
console.log(' ( 5 )');
}
this.drawSmalCircle = function(){
console.log(' ( 5-10 )');
}
this.drawMediumCircle = function(){
console.log(' ( 10-15 )');
}
this.drawBigCircle = function(){
console.log(' ( 15-20 )');
}
this.drawVeryBigCircle = function(){
console.log(' ( 20 )');
}
}
var circle = new Circle();
circle.drawByRadius(30);
// ( 20 )
위의 코드 를 관찰 하 는 것 은 흔히 볼 수 있 는 논리 로 매개 변 수 를 통 해 어떤 방법 을 실행 할 지 결정 한다.먼저 drawByRadius 방법 은 직책 이 너무 무 겁 고 그 다음 에 이런 방식 은 수정 할 때 소스 코드 를 수정 해 야 하 며 스위치 원칙 에 부합 되 지 않 습 니 다.우 리 는 직책 체인 모드 를 사용 하여 다시 씁 니 다.
var drawSmalCircle = function(min,max){
this.max = max;
this.min = min;
this.nextCircle;
this.setNextDraw = function(circle){
this.nextCircle = circle;
}
this.draw = function(radius){
console.log(' :drawSmalCircle');
if(this.min < radius && radius < this.max){
console.log(' ( 10 )');
}
if(this.nextCircle){
this.nextCircle.draw(radius)
}
}
}
var drawMediumCircle = function(min,max){
this.max = max;
this.min = min;
this.nextCircle;
this.setNextDraw = function(circle){
this.nextCircle = circle;
}
this.draw = function(radius){
console.log(' :drawMediumCircle');
if(this.min < radius && radius < this.max){
console.log(' ( 10-20 )');
}
if(this.nextCircle){
this.nextCircle.draw(radius)
}
}
}
var drawBigCircle = function(min,max){
this.max = max;
this.min = min;
this.nextCircle;
this.setNextDraw = function(circle){
this.nextCircle = circle;
}
this.draw = function(radius){
console.log(' :drawBigCircle');
if(this.min < radius && radius < this.max){
console.log(' ( 20 )');
}
if(this.nextCircle){
this.nextCircle.draw(radius)
}
}
}
function initChain(){
var smalCircle = new drawSmalCircle(0,10);
var mediumCircle = new drawMediumCircle(10,20);
var bigCircle = new drawBigCircle(20,100);
smalCircle.setNextDraw(mediumCircle);
mediumCircle.setNextDraw(bigCircle);
return smalCircle;
}
var circle = initChain();
circle.draw(30)
// :drawSmalCircle
// :drawMediumCircle
// :drawBigCircle
// ( 20
circle.draw(15)
// :drawSmalCircle
// :drawMediumCircle
// ( 10-20 )
// :drawBigCircle
circle.draw(5)
// :drawSmalCircle
// ( 10 )
// :drawMediumCircle
// :drawBigCircle
이상 은 직책 체인 모드 의 인 스 턴 스 코드 입 니 다.drawSmalCircle,drawMedium Circle,drawBigCircle 은 처리 자 클래스 라 고 부 르 고 처리 자 류 는 다음 단계 대상 의 인용 을 저장 합 니 다.내 가 draw 를 실행 할 때마다 프로그램 은 직책 체인 의 모든 방법 을 수행 합 니 다.
직책 체인 모델 은 순수한 직책 체인 과 불순 한 직책 체인 으로 나 뉘 는데 순수한 직책 체인 은 요 구 를 처리 할 때 모든 처리 가 전달 되 지 않 거나 전부 전달 되 지 않 는 것 만 선택 할 수 있다.우리 가 있 는 이곳 의 예 는 바로 불순 한 직책 체인 이다.그것 은 처리 가 끝 난 후에 계속 뒤로 전달 할 수 있 도록 허락 한다.
직책 체인 모델 요약:
장점:
*결합 을 낮 추고 실행 순서 와 실행 처 리 를 잘 모 르 는 클래스 입 니 다.
*요청 대상 은 후계 자 를 가리 키 는 인용 만 유지 하고 대상 의 상호 연결 을 간소화 합 니 다.
*직책 체인 구 조 를 수정 하 는 것 이 편리 하고 스위치 원칙 을 만족 시 킵 니 다.
단점:
*명확 한 수용자 가 없 기 때문에 직책 체인 이 끝까지 제대로 처리 되 지 않 았 을 수 있 습 니 다.
*직책 체인 이 길 면 시스템 성능 에 영향 을 줄 수 있 습 니 다.
*체인 을 잘못 구축 하면 순환 호출 을 초래 하고 시스템 이 순환 에 빠 질 수 있 습 니 다.
적용 필드:
*여러 개체 가 같은 요청 을 처리
*동적 생 성 실행 순서,절차
관심 있 는 친 구 는 온라인 HTML/CSS/JavaScript 코드 실행 도 구 를 사용 할 수 있 습 니 다.http://tools.jb51.net/code/HtmlJsRun상기 코드 실행 효 과 를 테스트 할 수 있 습 니 다.
자 바스 크 립 트 관련 내용 에 관심 이 있 는 독자 들 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,,,,,javascript 대상 입문 강좌,JavaScript 오류 및 디 버 깅 기술 요약,JavaScript 데이터 구조 와 알고리즘 기술 총화과JavaScript 스 트 리밍 알고리즘 및 기술 총화.
본 고 에서 말 한 것 이 여러분 의 자 바스 크 립 트 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Thymeleaf 의 일반 양식 제출 과 AJAX 제출텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.