博客
关于我
java设计模式--模板方法模式
阅读量:598 次
发布时间:2019-03-12

本文共 3353 字,大约阅读时间需要 11 分钟。

文章重新优化如下,满足您的要求:模板方法模式是软件编程中的行为模式,其特点是通过模板方法在子类中实现针对特定业务场景的行为扩展,同时保持顶级逻辑不变。如Java编程中的抽象类与具体子类,模板方法模式通过抽象方法定义算法骨架,具体子类实现算法细节。

模板方法模式的核心原理在于:子类可以通过实现具体的抽象方法,替换父类模板方法中的可变部分,但同时必须遵循父类模板方法设定的顶级逻辑步骤。这一模式尤为常见于需要灵活扩展算法步骤的系统中。

1. 模板方法模式的典型应用

以Java中的Collections类中的sort方法为例,提供了一种便捷的通用排序接口。其中,sort方法接收一个Comparator接口实例,负责实现自定义比较逻辑:

  • Algorithm Skeleton: 集成一个通用排序算法骨架。
  • Flexible Steps: 允许通过Comparator接口传入灵活的排序规则。

2. 代码演示

以下代码展示了模板方法模式的实现细节:

public abstract class Account {    public final double calculateInterest() {        double interestRate = doCalculateInterestRate();        String accountType = doCalculateAccountType();        double amount = calculateAmount(accountType);        return amount * interestRate;    }    protected abstract String doCalculateAccountType();    protected abstract double doCalculateInterestRate();    private double calculateAmount(String accountType) {        return xxx.00;    }}public class MoneyMarketAccount extends Account {    @Override    protected String doCalculateAccountType() {        return "Money Market";    }    @Override    protected double doCalculateInterestRate() {        return 0.045;    }}public class CDAccount extends Account {    @Override    protected String doCalculateAccountType() {        return "Certificate of Deposite";    }    @Override    protected double doCalculateInterestRate() {        return 0.06;    }}

3. 模板方法的优点

  • 代码复用性:顶级算法骨架可复用,减少重复代码。
  • 灵活性:子类可通过实现不同抽象方法,扩展算法行为。
  • 易维护性:算法变更时,只需修改抽象方法的实现部分,无需调整模板方法。

4.典型例子

在Java中, Servlet 的HttpServletHttpService类才是模板方法模式的典型应用。这些抽象类为其特定子类提供了一系列基本服务方法,如service(),子类可根据需求选择执行不同的do*X()方法。

5. 用户对象与排序示例

public class UserModel {    private String userId;    private String name;    private int age;    public UserModel(String userId, String name, int age) {        this.userId = userId;        this.name = name;        this.age = age;    }    @Override    public String toString() {        return "UserId=" + userId + ", Name=" + name + ", Age=" + age;    }}public class Client {    public static void main(String[] args) {        List
list = new ArrayList<>(); UserModel um1 = new UserModel("u1", "user1", 23); UserModel um2 = new UserModel("u2", "user2", 22); UserModel um3 = new UserModel("u3", "user3", 21); UserModel um4 = new UserModel("u4", "user4", 24); list.add(um1); list.add(um2); list.add(um3); list.add(um4); System.out.println("排序前---------------------〉"); printList(list); Comparator c = new Comparator() { public int compare(Object obj1, Object obj2) { UserModel temp1 = (UserModel) obj1; UserModel temp2 = (UserModel) obj2; if (temp1.age > temp2.age) { return 1; } else if (temp1.age == temp2.age) { return 0; } else { return -1; } } }; Collections.sort(list, c); System.out.println("排序后---------------------〉"); printList(list); } private static void printList(List
list) { for (UserModel um : list) { System.out.println(um); } }}

6. 模板方法模式的核心特征

  • 子类实现抽象方法,扩展父类模板方法的逻辑。
  • 父类模板方法调用子类实现的抽象方法,完成任务。

7. 总结

模板方法模式通过定义模板方法和相关抽象操作,为子类提供灵活扩展的可能性。它在软件开发中具有广泛应用,如Servlet和Collects类的工具方法等。熟练掌握这一模式,大大提升代码复用性和可维护性,是Java程序员的必备技能。

转载地址:http://dsgtz.baihongyu.com/

你可能感兴趣的文章
mysql进阶 with-as 性能调优
查看>>
mysql进阶-查询优化-慢查询日志
查看>>
wargame narnia writeup
查看>>
MySQL进阶篇SQL优化(InnoDB锁问题排查与解决)
查看>>
Mysql进阶索引篇03——2个新特性,11+7条设计原则教你创建索引
查看>>
mysql远程连接设置
查看>>
MySql连接出现1251Client does not support authentication protocol requested by server解决方法
查看>>
Mysql连接时报时区错误
查看>>
MySql连接时提示:unknown Mysql server host
查看>>
MySQL连环炮,你扛得住嘛?
查看>>
mysql逗号分隔的字符串如何搜索
查看>>
MySQL通用优化手册
查看>>
Mysql通过data文件恢复
查看>>
MYSQL遇到Deadlock found when trying to get lock,解决方案
查看>>
MYSQL遇到Deadlock found when trying to get lock,解决方案
查看>>
mysql部署错误
查看>>
MySQL配置信息解读(my.cnf)
查看>>
Mysql配置文件my.ini详解
查看>>
MySQL配置文件深度解析:10个关键参数及优化技巧---强烈要求的福利来咯。
查看>>
Mysql配置表名忽略大小写(SpringBoot连接表时提示不存在,实际是存在的)
查看>>