자바 디자인 모델 템 플 릿 방법(템 플 릿)원리 분석

이 글 은 주로 자바 디자인 모델 템 플 릿 방법(Template)의 원리 해석 을 소개 하 였 으 며,예시 코드 를 통 해 매우 상세 하 게 소개 하 였 으 며,여러분 의 학습 이나 업무 에 대해 어느 정도 참고 학습 가 치 를 가지 고 있 으 므 로 필요 한 분 들 은 참고 하 시기 바 랍 니 다.
선언:
우 리 는 개발 과정 에서 고정된 절차 가 많 습 니 다.이런 절 차 는 고정 적 인 절차 가 많 습 니 다.예 를 들 어 JDBC 에서 연결 을 얻 고 연결 을 닫 는 절 차 는 고정 적 으로 변 하지 않 습 니 다.변동 하 는 것 은 설정 매개 변수 만 있 고 분석 결과 집 은 서로 다른 실체 대상 에 따라'조정'합 니 다.이런 고정 알고리즘 절 차 를 가지 는데 그 중에서 고정된 단계 가 있 습 니 다.고정 적 이지 않 은 스텝 이 존재 하 는 상황 에서 템 플 릿 방법 모델 이 탄생 했다.
템 플 릿 방법 모드(Template)정의:
템 플 릿 방법 모델 은 템 플 릿 모델 이 라 고도 부 릅 니 다.아버지 류 가 여러 단계 로 모인 알고리즘 구 조 를 정의 한 것 을 말 합 니 다.그 중에서 많은 걸음 걸 이 는 아버지 류 에서 이 루어 진 것 입 니 다.어떤 걸음 걸 이 는 서로 다른 서브 클래스 에 따라 서로 다른 실현 을 가지 기 때문에 이런'불확실'의 실현 걸음 걸 이 를 추상 적 인 방법 으로 서브 클래스 에 맡 겨 실현 하 는 것 입 니 다.템 플 릿 모드 의 핵심 은 하위 클래스 가 알고리즘 구 조 를 바 꾸 지 않 는 상황 에서 알고리즘 의 일부 단 계 를 다시 정의 하 는 것 이다.행위 형 디자인 모델 에 속한다.응용 이 매우 광범 위 하 다.예 를 들 어 Mybatis 의 BaseExecutor;Spring 의 JdbcTemplate;Spring 통합 Hibernate 의 HibernateTemplate,Spring 통합 각종 Mq 의 Template,그리고 MongodbTemplate 등...
모드 의 캐릭터:
추상 류(AbstractClass):템 플 릿 방법 을 실현 하고 알고리즘 의 골격 을 정의 했다.
구체 적 인 유형(Concrete):추상 적 인 유형 에서 추상 적 인 방 류 를 실현 하여 아버지 류 가 정의 하 는 알고리즘 을 더욱 완전 하 게 만 들 었 다.
코드 구현:
1:추상 적 인 클래스 로 절 차 를 정의 합 니 다.예 를 들 어 우 리 는 매일 출근 할 때 하나의 절차 가 있 습 니 다.켜 기-->코드 쓰기(서로 다른 프로그래머 는 서로 다른 코드 를 쓸 수 있 습 니 다-->꺼 져 있 습 니 다.전체 프로 세 스 에서 켜 는 것 과 꺼 지 는 것 은 같 습 니 다.코드 만 쓰 는 것 이 다 릅 니 다.자바 프로그래머 는 자바 코드 를 쓰 고 Php 프로그래머 는 Php 코드 를 씁 니 다.우 리 는 먼저 추상 적 인 부류 로 이 절 차 를 정의 한다.

public abstract class Work {

  //        
  public void workDay(){

    //1:    
    openComputer();
    //2:  :   
    coding();
    //3:         closeComputer();
  }

  //  
  private final void openComputer() {
    System.out.println("    ,  ");
  }

  //   
  protected abstract void coding();

  //  
  private final void closeComputer() {
    System.out.println("  ,  ");
  }

}
2:구체 적 실현
자바 프로그래머

public class JavaProgrammer extends Work {
  
  @Override
  protected void coding() {
    System.out.println("Java     Idea, Java  。。。");
  }
}
PHP 프로그래머

public class PhpProgrammer extends Work {

  @Override
  protected void coding() {
    System.out.println("PHP     Zend Studio, Php  。。。");
  }
}
3:사용

public class TemplateMethodDemo {

  public static void main(String[] args) {
    Work javaProgrammer = new JavaProgrammer();
    javaProgrammer.workDay();
    System.out.println("================");
    Work phpProgrammer = new PhpProgrammer();
    phpProgrammer.workDay();
  }
}
실행 결과

템 플 릿 모드 가 원본 코드 에서 의 구현:
1:우 리 는 매일 사용 하 는 HttpServlet 안의 service 방법,service 방법 에서 호출 절 차 를 정 의 했 습 니 다.클 라 이언 트 가 호출 하 는 방식 에 따라 if else 논리 적 판단 에 따라 서로 다른 방법 을 호출 합 니 다.예 를 들 어 doGet,doPost,doDelete 등 은 restful 호출 을 실현 하고 구체 적 인 doGet,doPost 방법 은 우리 가 정의 한 Servlet 에서 다시 쓸 수 있 습 니 다.

2:Mybatis 프레임 워 크 에 도 전형 적 인 실 용적 인 부분 이 있 습 니 다.예 를 들 어 BaseExecutor 류 는 기본 적 인 SQL 실행 류 로 대부분의 SQL 의 실행 논 리 를 실현 한 다음 에 몇 가지 방법 을 하위 클래스 에 맞 춤 형 으로 가 르 칩 니 다.소스 코드 는 다음 과 같 습 니 다.


그 중에서 doUpdate(),doFlush Statements(),doQuery(),doQuery Cursor()등 방법 은 모두 하위 클래스 에서 이 루어 집 니 다.BaseExecutor 는 하위 클래스 가 있 습 니까?우 리 는 그의 유 도 를 살 펴 보 자.

우 리 는 구체 적 으로 각 하위 클래스 의 서로 다른 실현 을 보 러 갈 수 있다.
템 플 릿 모드 의 장단 점:
장점:
1:템 플 릿 모드 를 이용 하여 같은 처리 논리의 코드 를 추상 적 인 부류 에 넣 고 코드 의 복용 성 을 높 일 수 있다.
2:서로 다른 논 리 를 서로 다른 하위 클래스 에 넣 고 하위 클래스 의 확장 을 통 해 새로운 행 위 를 추가 하여 코드 의 확장 성 을 향상 시 킵 니 다.
3:변 하지 않 는 행 위 를 부모 클래스 에 쓰 고 하위 클래스 의 중복 코드 를 제거 하 며 좋 은 코드 재 활용 플랫폼 을 제공 하여 개폐 원칙 에 부합 합 니 다.
4:회사 의 고급 엔지니어 나 구조 사 는 프로젝트 초기 에 템 플 릿 모델 로 절 차 를 정의 하여 다른 인 코딩 엔지니어 로 하여 금 구체 적 인 것 을 실현 하 게 할 수 있다.
단점:
1:모든 추상 류 는 적어도 하나의 하위 류 로 이 루어 져 야 하기 때문에 유형의 수량 이 증가 했다.
2:클래스 의 수량 이 증가 하여 시스템 의 복잡성 을 간접 적 으로 증가 시 켰 다.
3:계승 관계 의 자신의 단점 때문에 만약 에 아버지 류 가 새로운 추상 적 인 방법 을 추가 하면 원래 의 자 류 는 모두 한 번 실현 해 야 한다.
코드 링크:https://gitee.com/ganganbobo/gps-parent
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기