(19) 중개자 모델 - 코드 실현

14960 단어

소개하다.


개념: 하나의 중개 대상으로 일련의 대상 상호작용을 봉인한다.중개자는 각 대상을 현식적으로 서로 인용할 필요가 없게 하여 결합을 느슨하게 하고 그들 간의 상호작용을 독립적으로 변화시킬 수 있다.
응용 장면: 서로 다른 기능의 모듈 간 호출 관계가 복잡하고 결합도가 높아 수정할 때 사용하기에 불리하다.
장점: 결합을 낮추고 모듈이 독립적이다.
나쁜 점: 중개인의 업무가 복잡하고 유지하기가 쉽지 않다.
 

코드:


//정의 모듈 추상 클래스
package note.com.mediator;

public abstract class Element {
    public Mediator mediator = null;
    
    public abstract void good();
    
    public abstract void bad();

    public Mediator getMediator() {
        return mediator;
    }

    public void setMediator(Mediator mediator) {
        this.mediator = mediator;
    }
    
    public abstract void changeGood();
    
    public abstract void changeBad();
    
    

}

//모듈 구체화
package note.com.mediator;

/**
 *  - 
 * @author lxz
 *
 */
public class Army extends Element{

    @Override
    public void good() {
        System.out.println(" ");
        
    }

    @Override
    public void bad() {
        System.out.println(" ");
    }

    @Override
    public void changeGood() {
        getMediator().change(Mediator.ARMY, Mediator.GOOD);
    }
    
    @Override
    public void changeBad() {
        getMediator().change(Mediator.ARMY, Mediator.BAD);
    }

}
package note.com.mediator;

/**
 *  - 
 * @author lxz
 *
 */


public class Goverment extends Element{

    @Override
    public void good() {
        System.out.println(" ");
    }

    @Override
    public void bad() {
        System.out.println(" ");
    }
    
    @Override
    public void changeGood() {
        good();
        getMediator().change(Mediator.GOVERMENT, Mediator.GOOD);
    }
    
    @Override
    public void changeBad() {
        bad();
        getMediator().change(Mediator.GOVERMENT, Mediator.BAD);
    }

}
package note.com.mediator;


/**
 *  - 
 * @author lxz
 *
 */
public class People  extends Element{

    @Override
    public void good() {
        System.out.println(" ");
    }

    @Override
    public void bad() {
        System.out.println(" ");
    }
    
    @Override
    public void changeGood() {
        good();
        getMediator().change(Mediator.PEOPLE, Mediator.GOOD);
    }
    
    @Override
    public void changeBad() {
        bad();
        getMediator().change(Mediator.PEOPLE, Mediator.BAD);
    }

}

//중개자, 모듈 간의 호출 정의
package note.com.mediator;

/**
 *  
 * @author lxz
 *
 */
public class Mediator{
    public static final String ARMY = "Army";
    public static final String GOVERMENT = "Goverment";
    public static final String PEOPLE = "People";
    public static final String GOOD = "good";
    public static final String BAD = "bad";
    
    public Element a = null;
    public Element g = null;
    public Element p = null;
    
    public Mediator(Army a,Goverment g,People p){
        this.a = a;
        this.g = g;
        this.p = p;
    }
    
    public void change(String label,String state){
        
        if(ARMY.equals(label)){
            if(GOOD.equals(state)){
                g.good();
                p.good();
            }else if(BAD.equals(state)){
                g.bad();
                p.bad();
            }
        }else if(GOVERMENT.equals(label)){
            if(GOOD.equals(state)){
                a.good();
                p.good();
            }else if(BAD.equals(state)){
                a.bad();
                p.bad();
            }
            
        }else if(PEOPLE.equals(label)){
            if(GOOD.equals(state)){
                a.good();
                g.good();
            }else if(BAD.equals(state)){
                a.bad();
                g.bad();
            }
        }
    }

    public Element getA() {
        return a;
    }

    public void setA(Element a) {
        this.a = a;
    }

    public Element getG() {
        return g;
    }

    public void setG(Element g) {
        this.g = g;
    }

    public Element getP() {
        return p;
    }

    public void setP(Element p) {
        this.p = p;
    }

    

}

//테스트 클래스
package note.com.mediator;

public class MediatorTest {
    public static void main(String[] args) {
        // , , 
        Army a = new Army();
        Goverment g = new Goverment();
        People p = new People();
        // 
        Mediator mediator = new Mediator(a,g,p);
        a.setMediator(mediator);
        g.setMediator(mediator);
        p.setMediator(mediator);
        a.changeBad();// 
        System.out.println("====");
        g.changeBad();// 
        System.out.println("====");
        p.changeGood();// 
    }
}

//결과
정부 가 돈 이 없으면 인민 이 행복하지 않다 = = 정부 가 돈 이 없으면 부대 약소 인민 이 행복하지 않다 = = = = 인민 행복 부대 강대하다 정부 가 돈 이 있다
 
 
이를 통해 알 수 있듯이 세 모듈 간의 호출 관계는 Mediator가 제어하여 세 모듈이 자신의 기능에 더욱 전념하도록 한다.
주의: 사순환으로 설계되지 않도록 조심하세요.

좋은 웹페이지 즐겨찾기