JavaScript 디자인 모드 의 조정자 모드 인 스 턴 스 상세 설명

본 고의 실례 는 자 바스 크 립 트 디자인 모델 의 조정자 모델 을 서술 하 였 다.여러분 께 참고 하도록 공유 하 겠 습 니 다.구체 적 으로 는 다음 과 같 습 니 다.
1.정의
조정자 모델 은 일련의 대상 이 상호작용 하 는 방식 을 포장 하여 이런 대상 들 이 서로 뚜렷 한 역할 을 하지 않도록 한다.그들 로 하여 금 흩 어 지고 우연히 일치 하 게 할 수 있다.어떤 대상 간 의 역할 이 바 뀌 었 을 때 다른 대상 간 의 역할 에 즉각 영향 을 주지 않 는 다.이러한 작용 이 서로 독립 적 으로 변화 할 수 있 도록 보장 하 다.조정자 모드 는 다 대 다 의 상호작용 을 1 대 다 의 상호작용 으로 전환시킨다.조정자 모델 은 대상 의 행위 와 협력 을 추상 화하 고 대상 을 작은 척도 의 행위 에서 다른 대상 과 의 상호작용 을 분리 하여 처리한다.
2.사용 하 는 이유
대상 간 의 상호작용 이 많 고 모든 대상 의 행위 조작 이 서로 에 게 의존 할 때 한 대상 의 행 위 를 수정 할 때 다른 대상 의 행 위 를 수정 하 는 것 을 방지 하기 위해 조정자 모델 로 결합 문 제 를 해결 할 수 있다.
이 모델 은 대상 간 의 다 대 다 관 계 를 한 쌍 의 다 관계 로 바 꾸 고 조정자 대상 은 시스템 을 그물 모양 구조 에서 조정자 중심의 성형 구조 로 바 꾸 어 시스템 의 복잡성 을 낮 추고 확장 가능 한 역할 을 한다.
조정자 설계 모드 구성 도:

조정자 모드 는 다음 과 같은 캐릭터 를 포함한다.
●추상 적 인 조정자(Mediator)역할:동료 대상 을 조정자 대상 으로 정의 하 는 인터페이스,그 중에서 주요 방법 은 하나의(또는 여러 개)사건 방법 이다.
●구체 적 인 조정자(Concrete Mediator)역할:추상 적 인 조정자 가 밝 힌 사건 방법 을 실현 했다.구체 적 인 조정 자 는 모든 구체 적 인 동료 류 를 알 고 각 동료 대상 의 상호작용 관 계 를 구체 적 으로 조율 한다.
●추상 적 인 동료 류(Colleague)역할:조정자 가 동료 대상 으로 가 는 인 터 페 이 스 를 정의 한다.동료 상 대 는 조정자 만 알 고 나머지 동료 상 대 는 모른다.
●구체 적 인 동료 류(Concrete Colleague)역할:모든 구체 적 인 동료 류 는 추상 적 인 동료 류 에서 물 려 받는다.자신의 업 무 를 실현 하고 다른 동료 와 통신 이 필요 할 때 가지 고 있 는 조정자 와 통신 하 며 조정자 가 다른 동료 와 상호작용 을 한다.
JS 구현 코드:
CD 시디롬

function CDDriver( mediator ) {
  //         
  this.mediator = mediator;
  /**
   *                
   */
  this.getMediator = function() {
    return mediator;
  }
 //         
 this.data = "";
  /**
   *            
   */
  this.getData = function() {
    return this.data;
  }
  /**
   *     
   */
  this.readCD = function(){
    //           ,      
    this.data = "   ,    !";
    //    ,          
    this.getMediator().changed(this);
  }
}

CPU 프로세서

function CPU( mediator ) {
 //         
 this.mediator = mediator;
 /**
  *                
  */
 this.getMediator = function() {
   return mediator;
 }
  //         
  this.videoData = "";
  //         
  this.soundData = "";
  /**
   *            
   */
  this.getVideoData = function() {
    return this.videoData;
  }
  /**
   *            
   */
  this.getSoundData = function() {
    return this.soundData;
  }
  /**
   *     ,             
   */
  this.executeData = function(data){
    //      ,       ,       
    var array = data.split(",");
    this.videoData = array[0];
    this.soundData = array[1];
    //    ,CPU    
    this.getMediator().changed(this);
  }
}

그래 픽 카드

function VideoCard( mediator ) {
  //         
  this.mediator = mediator;
  /**
   *                
   */
  this.getMediator = function() {
    return mediator;
  }
  /**
   *       
   */
  this.showData = function(data){
    console.log("      :" + data);
  }
}

사 운 드 카드

function SoundCard( mediator ){
  //         
  this.mediator = mediator;
  /**
   *                
   */
  this.getMediator = function() {
    return mediator;
  }
  /**
   *           
   */
  this.soundData = function(data){
    console.log("    :" + data);
  }
}

구체 적 인 조정자 류

function MainBoard() {
  //           ――   
  this.cdDriver = null;
  //           ――CPU 
  this.cpu = null;
  //           ――   
  this.videoCard = null;
  //           ――   
  this.soundCard = null;
  this.setCdDriver = function(cdDriver) {
    this.cdDriver = cdDriver;
  }
  this.setCpu = function(cpu) {
    this.cpu = cpu;
  }
  this.setVideoCard = function(videoCard) {
    this.videoCard = videoCard;
  }
  this.setSoundCard = function(soundCard) {
    this.soundCard = soundCard;
  }
  this.changed = function(c) {
    if(c instanceof CDDriver){
      //         
      this.opeCDDriverReadData(c);
    }else if(c instanceof CPU){
      this.opeCPU(c);
    }
  }
  /**
   *                   
   */
  this.opeCDDriverReadData = function(cd){
    //          
    var data = cd.getData();
    //        CPU    
    cpu.executeData(data);
  }
  /**
   *   CPU              
   */
  this.opeCPU = function(cpu){
    //   CPU      
    var videoData = cpu.getVideoData();
    var soundData = cpu.getSoundData();
    //                 
    this.videoCard.showData(videoData);
    this.soundCard.soundData(soundData);
  }
}

클 라 이언 트

//     ――  
var mediator = new MainBoard();
//     
var cd = new CDDriver(mediator);
var cpu = new CPU(mediator);
var vc = new VideoCard(mediator);
var sc = new SoundCard(mediator);
//          
mediator.setCdDriver(cd);
mediator.setCpu(cpu);
mediator.setVideoCard(vc);
mediator.setSoundCard(sc);
//     ,       ,      
 cd.readCD();

인쇄 효과

조정자 모드 의 장점
●느슨 한 결합:조정자 모델 은 여러 동료 대상 간 의 상호작용 을 조정자 대상 에 밀봉 하여 동료 대상 간 의 느슨 한 결합 을 통 해 기본적으로 상호 보완 적 인 의존 을 할 수 있다.이렇게 되면 동료 대상 은 예전 처럼'한 곳 을 끌 고 온몸 을 움 직 이지 않 고 독립 적 으로 변화 하고 재 활용 할 수 있다.
●집중 제어 상호작용:여러 동료 대상 의 상호작용 을 조정자 대상 에 봉 하여 집중 적 으로 관리 하여 이러한 상호작용 행 위 를 변화 시 킬 때 조정자 대상 만 수정 하면 된다.물론 이미 만들어 진 시스템 이 라면 조정자 대상 을 확장 하고 각 동료 류 는 수정 할 필요 가 없다.
●여러 쌍 이 한 쌍 으로 변 한다.조정자 모드 를 사용 하지 않 을 때 동료 대상 간 의 관 계 는 보통 여러 쌍 으로 변 한다.조정자 대상 을 도입 한 후 조정자 대상 과 동료 대상 의 관 계 는 양 방향 한 쌍 으로 변 한다.이 는 대상 의 관 계 를 더욱 쉽게 이해 하고 실현 할 수 있다.
조정자 모드 의 단점
조정자 모드 의 잠재 적 인 단점 중 하 나 는 과도 한 집중 화 이다.만약 에 동료 대상 의 상호작용 이 매우 많 고 복잡 하 다 면 이런 복잡성 이 모두 조정자 에 게 집중 되면 조정자 대상 이 매우 복잡 해 지고 관리 와 유지 가 어렵다.
더 많은 자 바스 크 립 트 관련 내용 은 본 사이트 의 주 제 를 볼 수 있 습 니 다.,,,,,,,,,,,,,,,
본 고 에서 말 한 것 이 여러분 의 자 바스 크 립 트 프로 그래 밍 에 도움 이 되 기 를 바 랍 니 다.

좋은 웹페이지 즐겨찾기