> Java > java지도 시간 > 본문

Java 클래식 디자인 패턴의 템플릿 메서드 패턴 정의 및 사용에 대한 코드 예제

黄舟
풀어 주다: 2017-08-10 09:19:57
원래의
1152명이 탐색했습니다.

이 글에서는 주로 Java의 고전적인 디자인 패턴 중 템플릿 메소드 패턴을 소개하고, 템플릿 메소드 패턴의 원리와 정의를 간략하게 설명하며, Java 템플릿 메소드 패턴의 구체적인 사용법을 도움이 필요한 친구들이 참고할 수 있는 형태로 분석합니다. it

이 글은 자바 디자인 패턴 중 템플릿 메소드 패턴을 예시와 함께 설명하고 있습니다. 참고할 수 있도록 모든 사람과 공유하세요. 세부 사항은 다음과 같습니다.

우리 삶에는 많은 것들이 구체적인 단계를 포함합니다. 업무를 처리하기 위해 은행에 가는 경우 일반적인 단계는 다음과 같습니다. 번호 받기 -> 양식 작성 -> 전화번호가 호출될 때까지 기다리기 -> 업무 처리. 이 단계 중 번호를 찍는 등 모두가 받아야 하는 부분은 그대로 유지되고, 양식을 작성하는 등 변경해야 하는 부분도 있지만, 업종에 따라 작성해야 하는 서류가 다릅니다. 또 다른 예로, 외식할 때 일반적인 단계는 주문 -> 대기 -> 식사 -> 지불이며 동일한 패턴을 찾을 수 있습니다. 그런 일은 셀 수 없이 많습니다.

프로젝트 개발에서 이러한 상황이 발생할 수도 있습니다. 여러 기능 모듈이 유사하거나 동일한 작업 단계를 가질 수 있지만 하나의 링크나 단계는 하나 이상의 공통을 추출할 수 있습니다. 상위 클래스(템플릿)를 사용하면 하위 클래스를 구현할 수 있습니다. 구체적인 방법. 예를 들어 비즈니스를 처리하기 위해 은행에 가겠습니다.

시뮬레이션 추상 클래스:


/**
* 模板方法模式的模板框架(以去银行办理业务为例)
* @description:
*/
public abstract class TempletBankFrame {
/* 比如:去柜台办理银行卡业务* */
public final void handleBankCard() {
/* 第一步:进入银行大厅取号* */
takeNumber();
/* 第二步:填写办理业务的相关单据* */
if(!isNeedThisMethod()){//特殊情况可以添加判断,如我之前有填写好单子,那今天就不必再填写了
writeBill();
}
/* 第三步:等待工作人员叫号* */
waitCall();
/* 第四步:办理业务* */
handleCard();
}
/* 取号步骤是不需要更改的,所以我们用private修饰* */
private void takeNumber() {
  System.out.println("办理银行业务请取号!");
}
/* 办理的业务不同,填写的内容不同,所以我们用protected修饰,让子类去处理具体业务* */
protected abstract void writeBill();
/* 等待叫号步骤也是不需要更改的,所以我们用private修饰* */
private void waitCall() {
  System.out.println("办理银行业务请取号!");
}
/* 办理的业务不同,用protected修饰,让子类去处理具体业务* */
protected abstract void handleCard();
/*定义一个钩子方法:由抽象类声明并实现,而子类会加以扩展。通常抽象类给出的实现是一个空实现,作为方法的默认实现。**/
protected abstract boolean isNeedThisMethod();
}
로그인 후 복사

콘크리트 구현 클래스: 예: 자금 인출 처리


/**
* 办理取钱业务
* @description:
*/
public class GetMoney extends TempletBankFrame {
@Override
protected void writeBill() {
  System.out.println("我在填写取钱的单据!");
}
@Override
protected void handleCard() {
  System.out.println("我要取500万大洋");
}
@Override
protected boolean isNeedThisMethod() {
  System.out.println("我已经填写过单子,今天就直接等待叫号了吧!");
  return true;
}
}
로그인 후 복사

콘크리트 구현 클래스: 예: I am 은행 카드 신청 예정


/**
* 办理银行卡
* @description:
*/
public class TackCard extends TempletBankFrame {
@Override
protected void writeBill() {
  System.out.println("我填写的是办理银行卡单据");
}
@Override
protected void handleCard() {
  System.out.println("我在办卡,即将完成!");
}
@Override
protected boolean isNeedThisMethod() {
  return false;
}
}
로그인 후 복사

테스트 클래스


/**
* 模板方法模式测试类
* @description:
*/
public class Test {
public static void main(String[] args) {
GetMoney money=new GetMoney();
money.handleBankCard();//调用模板中的办理业务方法
System.out.println("———–分隔线—————-");
TackCard card=new TackCard();
card.handleBankCard();
}
}
로그인 후 복사

최종 출력 결과:


办理银行业务请取号!
我已经填写过单子,今天就直接等待叫号了吧!
办理银行业务请取号!
我要取500万大洋
———–分隔线—————-
办理银行业务请取号!
我填写的是办理银行卡单据
办理银行业务请取号!
我在办卡,即将完成!
로그인 후 복사

위 내용은 Java 클래식 디자인 패턴의 템플릿 메서드 패턴 정의 및 사용에 대한 코드 예제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿