조정자 모드

4053 단어 작업
오랜만에 보니까 이해가 안 되네요!
 
조정자 모델은 일련의 대상의 상호작용 방식을 포장하여 이러한 대상들이 서로 뚜렷하게 인용할 필요가 없게 한다.그리하여 그들은 비교적 느슨하게 결합할 수 있다.이들 대상 중 일부 대상 간의 상호작용이 변화할 때 다른 일부 대상 간의 상호작용에 즉각 영향을 주지 않는다.따라서 이러한 상호작용이 서로 독립적으로 변화할 수 있음을 보장한다.
 
조정자 모델에서 모든 구성원 대상은 업무를 조율할 수 있지만 직접적으로 서로 관리하지 않는다.이들 대상은 모두 중심에 있는 조정자 대상과 밀접한 관계를 맺고 이 조정자 대상이 조율 작업을 한다.이 조정자는 조정자(Mediator)이고, 조정자가 조정한 구성원 대상은 동료(Colleague) 대상이다.
 
Colleague 대상 내부에서 발생하는 사건은 모든 동료에게 영향을 미치지만 이런 영향은 다른 대상에게 직접적으로 전달되지 않고 조정자 대상에게만 영향을 주고 조정자 대상은 반대로 다른 동료를 조율하여 전체 시스템의 행위를 형성한다.
 
/**
 *      
 */
public abstract class Colleague {
    private Mediator mediator;
    /**
     *        
     */
    public Colleague(Mediator mediator) {
        this.mediator = mediator;
    }
    /**
     *        
     */
    public Mediator getMediator(){
        return mediator;
    }
    /**
     *     ,                  ,       
     */
    public abstract void action();
    /**
     *          
     */
    public void change(){
        mediator.colleagueChanged(this);
    }
}

 
/**
 *      1
 */
public class Colleague1 extends Colleague {
    /**
     *            
     */
    public Colleague1(Mediator mediator) {
        super(mediator);
    }
    /**
     *          
     */
    @Override
    public void action() {
        System.out.println("This is an action from Colleague 1");
    }
}

 
/**
 *      2
 */
public class Colleague2 extends Colleague {
    /**
     *            
     */
    public Colleague2(Mediator mediator) {
        super(mediator);
    }
    /**
     *          
     */
    @Override
    public void action() {
        System.out.println("This is an action from Colleague 2");
    }
}

 
/**
 *      
 */
public abstract class Mediator {
    /**
     *     ,     
     *              ,                      
     *              
     */
    public abstract void colleagueChanged(Colleague colleague);
    
}

 
/**
 *        
 * 
 */
public class ConcreteMediator extends Mediator {
    private Colleague1 colleague1;
    private Colleague2 colleague2;
    
    /**
     *          
     */
    @Override
    public void colleagueChanged(Colleague colleague) {
        colleague1.action();
        colleague2.action();
    }
    /**
     *     ,      
     * 
     */
    public void createConcreteMediator(){
        colleague1 = new Colleague1(this);
        colleague2 = new Colleague2(this);
    }
    /**
     *     ,      
     */
    public Colleague1 getColleague1(){
        return colleague1;
    }
    /**
     *     ,      
     */
    public Colleague2 getColleague2(){
        return colleague2;
    }
}

 
조정자 호출 시퀀스:
Colleague1 대상에 변화가 생겼을 때 그는 Mediator 대상의 시간 방법인colleagueChanged(this)를 호출하고 자신을 매개 변수로 Mediator 대상에게 전달한다. 구체적인 조정자 대상인ConcreteMediator는Colleague1, Colleague2의 action() 행동 방법을 호출한다.
 
public class Client {

    public static void main(String[] args) {
        //        
        ConcreteMediator concreteMediator = new ConcreteMediator();
        //      
        concreteMediator.createConcreteMediator();
        //      1
        Colleague colleague1 = concreteMediator.getColleague1();
        //    1    
        colleague1.change();
    }
}

좋은 웹페이지 즐겨찾기