Java クラシック デザイン パターンにおけるテンプレート メソッド パターンの定義と使用法に関するコード例

黄舟
リリース: 2017-08-10 09:19:57
オリジナル
1159 人が閲覧しました

この記事では、主に Java の古典的なデザイン パターンのテンプレート メソッド パターンを紹介し、テンプレート メソッド パターンの原理と定義を簡単に説明し、Java テンプレート メソッド パターンの具体的な使用方法を例の形式で分析します。それ

この記事では、Java デザイン パターンのテンプレート メソッド パターンを例とともに説明します。参考のために皆さんと共有してください。詳細は次のとおりです:

私たちの生活では、多くのことに具体的な手順が含まれています。銀行に行って手続きをする場合、通常の手順は次のとおりです。番号を受け取ります -> フォームに記入します -> 番号が呼ばれるのを待ちます -> 手続きをします。これらの手順の中には、全員が必ず取らなければならない番号を取るなど変わらないものもあれば、書類への記入など変更が必要なものもありますが、事業者によって記入すべき書類は異なります。また、外食する場合も、注文→待つ→食べる→支払うという流れが一般的で、同様のパターンが見られます。そのようなことは無数にあります。

プロジェクト開発では、複数の機能モジュールが類似または同一の操作ステップを持っている場合がありますが、1 つのリンクまたはステップが異なる場合があります。親クラス (テンプレート) を使用してサブクラスを実装できます。具体的な方法。例として、銀行に行って業務を処理してみましょう:

シミュレーション抽象クラス:


/**
* 模板方法模式的模板框架(以去银行办理业务为例)
* @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;
}
}
ログイン後にコピー

具体的な実装クラス: たとえば、私はキャッシュカードを申請する予定です


/**
* 办理银行卡
* @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 中国語 Web サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート