设计模式之模板方法模式
来源:互联网 发布:js当前时间减一小时 编辑:程序博客网 时间:2024/06/04 00:44
设计模式之模板方法模式
模板方法模式简介
模板方法模式(Template Method Pattern),二十三中设计模式之一,也是一种比较常用的设计模式。模板方法模式,顾名思义,主要就是提供一个模板的,无论是在现实生活中还是在开发过程中,总会遇到这样的情况,完成某一项工作的时候,其大体的步骤是固定不变的,但是其中具体各个步骤的操作是根据实际情况来确定,这个时候,为了防止步骤出现错误,就可以使用模板方法模式,将整体的流程确定下来,然后将具体需要完成的内容留空,根据具体的情况再进行完成,比如说,我们去医院看病,需要的大概流程如下:
1. 挂号
2. 向医生反馈具体的病情
3. 医生根据具体情况开药
4. 交医药费
5. 取药
这其中的流程是固定的,但是第2点,第3点是要根据具体情况来确定的。在软件开发过程中,有一些过程也是如此的,使用者可以根据实际情况进行相应的实现,但是,我们不希望这个过程被乱,这时候,模板方法就起到很好的作用了。
模板方法的具体实现
接下来我们采用上面到医院看病的例子来具体看下模板方法的实现。
//这里需要使用抽象类而不是接口,有部分方法是需要实现的public abstract class SeeADoctor { private void registered(){ System.out.println("挂号..."); } // 这里最好是将抽象方法声明为protected,仅供子类使用 // 当然,这里可以根据情况有多个抽象的方法 protected abstract void talkWithDoctor(); private void checkOut(){ System.out.println("付款..."); } private void takeMedicine(){ System.out.println("取药..."); } // 处理流程,将其声明为final,避免流程被修改 public final void proceed(){ registered(); talkWithDoctor(); checkOut(); takeMedicine(); }}class SeeSkinDoctor extends SeeADoctor{ @Override protected void talkWithDoctor() { System.out.println("与皮肤科医生交谈...."); }}class SeeMentalDoctor extends SeeADoctor{ @Override protected void talkWithDoctor() { System.out.println("与精神科医生交谈...."); }}// 对应的测试类class Client{ public static void main(String[] args) { SeeADoctor seeADoctor = new SeeSkinDoctor(); seeADoctor.proceed(); seeADoctor = new SeeMentalDoctor(); seeADoctor.proceed(); }}
总结
模板方法模式主要是用于希望使用者按照一定的流程、过程来完成某个事情,同时使用者可以根据需要进行部分或者全部但不包括流程的定制此类情况,既能够保证按照一定的流程来完成某个事情,又能够让使用者根据需要进行定制。
阅读全文
0 0
- 设计模式之模板方法模式模板方法模式
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- 设计模式之模板方法
- Java设计模式之模板方法模式
- Oracle存储过程
- 跳跃表
- LeetCode 520:Detect Capital (c++)
- 如何通过源码修改手机型号等信息
- thinkphp单独连接一个数据库
- 设计模式之模板方法模式
- instanceof方法
- cocos compile 时提示ant 不是内部命令也不是外部命令
- SQL-创建表
- 组策略轻松实现软件发布,Active Directory系列之二十二
- MATLAB学习笔记 彩色图像处理
- 1、(一)外汇学习基础篇之通用定义
- 前端页面debug调试
- [笔记]:二分图最大匹配匈牙利算法