1 模板方法模式介绍
模板方法模式(template method pattern)原始定义是:在操作中定义算法的框架,将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。
2 模板方法模式原理
模板方法模式的定位很清楚,就是为了解决算法框架这类特定的问题,同时明确表示需要使用继承的结构。
3 模板方法模式实现
UML类图对应的代码实现
/**
* 抽象父类
**/
public abstract class AbstractClassTemplate {
void step1(String key){
System.out.println("在模板类中 -> 执行步骤1");
if(step2(key)){
step3();
}else{
step4();
}
step5();
}
boolean step2(String key){
System.out.println("在模板类中 -> 执行步骤2");
if("x".equals(key)){
return true;
}
return false;
}
abstract void step3();
abstract void step4();
void step5(){
System.out.println("在模板类中 -> 执行步骤5");
}
void run(String key){
step1(key);
}
}
public class ConcreteClassA extends AbstractClassTemplate {
@Override
void step3() {
System.out.println("在子类A中 -> 执行步骤3");
}
@Override
void step4() {
System.out.println("在子类A中 -> 执行步骤4");
}
}
public class ConcreteClassB extends AbstractClassTemplate {
@Override
void step3() {
System.out.println("在子类B中 -> 执行步骤3");
}
@Override
void step4() {
System.out.println("在子类B中 -> 执行步骤4");
}
}
public class Test01 {
public static void main(String[] args) {
AbstractClassTemplate concreteClassA = new ConcreteClassA();
concreteClassA.run("x");
System.out.println("================");
AbstractClassTemplate concreteClassB = new ConcreteClassB();
concreteClassB.run("");
}
}
在模板类中 -> 执行步骤1
在模板类中 -> 执行步骤2
在子类A中 -> 执行步骤 4
在模板类中 -> 执行步骤5
===========
在模板类中 -> 执行步骤1
在模板类中 -> 执行步骤2
在子类B中 -> 执行步骤 3
在模板类中 -> 执行步骤5
4 模板方法模式应用实例
文章来源:https://www.toymoban.com/news/detail-721064.html
/**
* 账户抽象类
**/
public abstract class Account {
//step1 具体方法-验证用户信息是否正确
public boolean validate(String account,String password){
System.out.println("账号: " + account + ",密码: " + password);
if(account.equalsIgnoreCase("tom") && password.equalsIgnoreCase("123456")){
return true;
}else{
return false;
}
}
//step2 抽象方法-计算利息
public abstract void calculate();
//step3 具体方法-显示利息
public void display(){
System.out.println("显示利息!");
}
//模板方法
public void handle(String account,String password){
if(!validate(account,password)){
System.out.println("账户或者密码错误!");
return;
}
calculate();
display();
}
}
/**
* 借款有一个月
**/
public class LoanOneMonth extends Account {
@Override
public void calculate() {
System.out.println("借款周期30天,利息为借款总额的10%");
}
}
/**
* 借款七天
**/
public class LoanSevenDays extends Account{
@Override
public void calculate() {
System.out.println("借款周期7天,无利息! 仅收取贷款金额的1%的服务费");
}
@Override
public void display() {
System.out.println("七日借款内无利息!");
}
}
public class Client {
public static void main(String[] args) {
Account a1 = new LoanSevenDays();
a1.handle("tom","123456");
System.out.println("===================");
Account a2 = new LoanOneMonth();
a2.handle("tom","123456");
}
}
5 模板方法模式总结
文章来源地址https://www.toymoban.com/news/detail-721064.html
到了这里,关于19 行为型模式-模板方法模式的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!