공장 방법 모델 과 IoC / DI 의 실제 응용 - AndroidPN 과 러시아 블록

1. Android Pn - IQHandler
공장 방법 모델 을 배 울 때 인 스 턴 스 코드 를 보면 예전 에 이런 모델 의 응용 을 본 적 이 있 는 것 같다.알 고 보 니 얼마 전 안 드 로 이 드 Pn 과 관련 된 프로젝트 에서 서버 에 세그먼트 코드 가 있 는 형식 이 공장 방법 과 비슷 하 다.
앞서 이 글 은 '안 드 로 이 드 PN 클 라 이언 트 (1) - 안 드 로 이 드 PN 소스 코드 분석' 에서 서버 에서 사용자 정의 xmpp 절 을 어떻게 처리 하 는 지 분석 했다.
IQHandler 처리 정보 < iq > 절의 추상 적 인 클래스 입 니 다. IQHandler 를 등록 하 는 것 은 IQHandler 를 계승 하여 그 중의 handleIQ (IQ) 방법 으로 응답 하 는 < iq > 절 을 되 돌려 줍 니 다.
IQHandler 의 process (IQ) 는 각종 IQ 를 처리 하 는 것 으로 실제 과정 에서 IQHandler handler = new IQXXXHandler () 이다.호출 중
handler. process () 는 하위 클래스 의 handleIQ (IQ) 방법 을 호출 합 니 다.
코드 가 어떻게 실현 되 는 지 다시 보 자.
   1: public abstract class IQHandler {
   2:  
   3:     //      ,   try...catch      
   4:     public void process(Packet packet) {
   5:         IQ iq = (IQ) packet;
   6:         IQ reply = handleIQ(iq);
   7:         if (reply != null) {
   8:             PacketDeliverer.deliver(reply);
   9:         }
  10:     }
  11:  
  12:     /**
  13:      * Handles the received IQ packet.
  14:      * 
  15:      * @param packet the packet
  16:      * @return the response to send back
  17:      * @throws UnauthorizedException if the user is not authorized
  18:      */
  19:     public abstract IQ handleIQ(IQ packet) throws UnauthorizedException;
  20: }

빨간색 코드 주의
IQ reply = handleIQ(iq);
public
abstract IQ handleIQ(IQ packet)
throws UnauthorizedException;
'공장 방법 모드' 가 보 여 준 예 와 딱 비슷 하지 않 습 니까?
1. 우선, 업무 류 (IQHandler) 는 클 라 이언 트 가 어떤 유형의 메 시 지 를 보 낼 지 사전에 알 수 없다. 즉, IQHandler 는 구체 적 인 메시지 류 (추상 적 인 IQ 계승) 와 결합 해 서 는 안 된다 는 것 이다.
 
2. 그러나 IQHandler 는 클 라 이언 트 가 보 낸 정 보 를 처리 하 는 데 사용 되 지만 구체 적 인 정보 유형 과 결합 할 수 없습니다.이때 공장 방법 모델, 업무 류 (IQHandler) 로 공장 방법 을 호출 할 수 있다.
public abstract IQ handleIQ (IQ packet), 이 방법 은 추상 적 인 유형 으로 하위 클래스 에서 이 루어 집 니 다.
즉, 예 를 들 어 X 와 Y 유형의 정보 가 있다. XIQ 와 YIQ.각각 XIQHandler 와 YIQHandler (IQHandler 의 하위 클래스) 가 있어 각각 handleIQ (IQ packet) 를 실현 한다.XIQHandler 는 X 타 입 정 보 를 처리 하고, YIQHandler 는 Y 타 입 정 보 를 처리 합 니 다.
 
IQHandler 는 어떤 유형의 정보 든 공장 방법 인 handleIQ (IQ packet) 를 호출 하여 이 정 보 를 처리 한 후 처리 결 과 를 되 돌려 줍 니 다.
이로부터 알 수 있다
IQHandler 는 Creator 에 해당 합 니 다.
IQ 는 제품 에 해당 합 니 다.
XIQHandler, YIQHandler 는 ConcreteCreator 에 해당 한다.
XIQ, YIQ 는 Concrete 제품 에 해당 합 니 다.
 
 
2. 러시아 사각형 - 사각형 류
Ioc / DI 는 설명 이 많 지 않 습 니 다. 주로 응용 프로그램 이 주동 적 이지 않 고 용기 가 자원 을 주입 하 기 를 수 동적 으로 기다 리 는 것 입 니 다.
1. 대상 을 대상 으로 하 는 사상 에 따라 러시아 사각형 을 분석 한 결과 게임 에서 떨 어 지 는 모든 방법 은 특정한 사각형 류 (정사각형, 긴 줄 등) 의 사례 임 을 알 수 있다.이 사각형 들 은 모두 똑 같은 행동 을 한다. 뒤 집기.
2. 프로그램 에서 각 사각형 의 대상 은 하나의 2 차원 배열 로 표시 되 기 때문에 사각형 이 뒤 집 힐 때 사각형 의 유형 에 따라 대응 하 는 2 차원 배열 도 다르다.
 
보충: 여기 서 두 배열 은 사각형 의 형식 을 나타 낸다.각 유형의 방법 은 반전 스타일 이 다 르 지만 반전 스타일 은 미리 정 의 될 수 있 습 니 다.네 개의 서로 다른 2 차원 배열 일 뿐이다.
그러나 사각형 류 는 게임 에서 어떤 유형의 사각형 (무 작위 로 생 성) 이 생 길 지 사전에 모 르 기 때문에 용기 가 특정한 유형의 사각형 자원 을 주입 하 기 를 기 다 려 야 한다.이 건 IoC / DI 로 해 야 돼.
네모 난 종류
   1: public abstract class Shape {
   2:     //           , 4   ,           
   3:     protected int[][][] allShape = new int[4][][];
   4:     //       ,          
   5:     private int status;
   6:     
   7:     /**
   8:      *     
   9:      */
  10:     public void rorate(){
  11:         status++;
  12:         drawShape(allShape[status]);
  13:     }
  14:     
  15:     /**
  16:      *     
  17:      * @param shape
  18:      */

19: public void drawShape(int[][] shape){

// ,

  21:     }
  20:      
  22:     
  23:     /**
  24:      *            
  25:      *          
  26:      */
  27:     public abstract void createShape();
  28: }

특정 사각형 클래스 (Shape 의 하위 클래스)
   1: public class SquareShapre extends Shape {
   2:  
   3:     @Override
   4:     public void createShape() {
   5:         allShape = new int[4][][];
   6:         //           ......
   7:     }
   8:  
   9: }

 
Shape 는 사각형 의 반전 행위 에 만 신경 을 쓰 고 어떤 사각형 이 외부 에서 주입 되 는 지 알 수 있 습 니 다.어떤 사각형 을 주입 하여 하위 클래스 에서 완성 합 니까?예 를 들 어 사각형 블록 을 주입 하려 면 Square Shape 류 로 자원 (2 차원 배열) 을 주입 합 니 다.
 
공장 방법 모델 과 IoC / DI 의 사상 은 모두 유사 하 다. 업무 상 서로 다른 유형의 임무 가 존재 하기 때문에 프로그램 에 나타 나 면 서로 다른 유형의 대상 을 호출 하여 같은 임 무 를 완성 해 야 한다.그러나 업무 유형 은 어떤 유형의 대상 이 있 는 지 모 르 기 때문에 공장 방법 이 필요 하 다. 또한 하위 클래스 가 공장 방법 을 실현 하고 특정 유형의 대상 으로 돌아 간 다음 에 업무 유형 은 이런 대상 을 사용 하여 임 무 를 완성 해 야 한다.

좋은 웹페이지 즐겨찾기