(16) 명령 모드 - 코드 구현

8770 단어

소개하다.


개념: 여러 대상이 요청을 처리할 수 있는 기회를 주어 요청의 발송자와 수신자 간의 결합 관계를 피한다.이 대상들을 하나의 체인으로 연결하고, 이 체인을 따라 요청을 전달하며, 대상이 그것을 처리할 때까지.
응용 장면: 장면을 처리하는 업무를 자주 늘린다. 예를 들어 간식 상품을 처리하는 유형, 끊임없이 증가하는 간식이 있기 때문에 간식을 처리하는 방법을 계속 늘려야 한다. 결합도가 너무 높다.결합도를 낮추기 위해 직책 체인 모드를 사용합니다.
이점: 유연한 확장.구조가 뚜렷하다.
 

코드:


//프로세서의 인터페이스 정의
package note.com.chain;

public interface Handler {

    public void doHandler(String label);
    
}

//다양한 상황의 처리 실현을 정의한다
package note.com.chain;

/**
 *  
 * @author lxz
 *
 */
public class AnimalChain  implements Handler{

    public void doHandler(String label) {
        System.out.println(label+": ");
    }

}
package note.com.chain;

/**
 *  
 * @author lxz
 *
 */
public class FishChain  implements Handler{

    public void doHandler(String label) {
        System.out.println(label+": ");
    }

}
package note.com.chain;

/**
 *  
 * @author lxz
 *
 */
public class InsectChain  implements Handler{

    public void doHandler(String label) {
        System.out.println(label+": ");
    }

}
package note.com.chain;

/**
 *  
 * @author lxz
 *
 */
public class PersonChain  implements Handler{

    public void doHandler(String label) {
        System.out.println(label+": ");
    }

}

//제어 프로세서의 분배 클래스 구현
package note.com.chain;

import java.util.HashMap;
import java.util.Map;

/**
 *  
 * @author lxz
 *
 */
public class MainChain implements Handler{
    public static final String FISH = "fish";
    public static final String ANIMAL = "animal";
    public static final String INSECT = "insect";
    public static final String PERSON = "person";
    private Map<String,Handler> chains = new HashMap<String,Handler>();
    public MainChain(){
        chains.put(FISH, new FishChain());
        chains.put(ANIMAL, new AnimalChain());
        chains.put(INSECT, new InsectChain());
        chains.put(PERSON, new PersonChain());
    }
    
    public void doHandler(String label) {
        Handler handler = chains.get(label);
        if(handler!=null){
            handler.doHandler(label);
        }
    }

}

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

/**
 *  
 * @author lxz
 *
 */
public class ChainTest {
    public static void main(String[] args) {
        System.out.println(" ");
        String thing1 = MainChain.INSECT;// 
        String thing2 = MainChain.ANIMAL;// 
        new MainChain().doHandler(thing1);
        new MainChain().doHandler(thing2);
    }
}

//결과
나 여기 처리해야 할 생물이 하나 있다. insect: 내 곤충 프로세서가 처리한다. animal: 내 동물류 프로세서가 처리한다.
 
이로써 모든 대기 처리는 MainChain 입구에서 처리되므로 구체적으로 누가 처리했는지 알 필요가 없다.또 새로 추가된 종은 처리해야 할 때 핸들러의 실현을 확장하고 이를 마인체인으로 관리하면 된다.예에서 실제 처리 클래스를MainChain과 분리하지 않았기 때문에 이렇게 하는 것도 매우 간단하다. 예를 들어 프로필을 불러오는 방식이 매우 많다.

좋은 웹페이지 즐겨찾기