文档章节

行为型模式之四:模版方法模式

奋斗到天明
 奋斗到天明
发布于 2015/08/27 17:40
字数 315
阅读 31
收藏 0

模版方法模式为实现特定的操作定义了工作流。他允许子类修改某些步骤,但是不能修改工作流的结构。 下面的例子展现模版方法模式如何工作。

类图

java代码

Vehicle类定义了车及其工作流程

package com.programcreek.designpatterns.templatemethod;
 
abstract public class Vehicle {
  //set to protected so that subclass can access
  protected boolean status;
 
  abstract void start();
  abstract void run();
  abstract void stop();
 
  public void testYourVehicle(){
    start();
    if(this.status){
      run();
      stop();
    }  
  }
}

Car继承了Vehicle,并定义了具体的方法

package com.programcreek.designpatterns.templatemethod;
 
public class Car extends Vehicle {
 
  @Override
  void start() {
    this.status = true;
  }
 
  @Override
  void run() {
    System.out.println("Run fast!");
 
  }
 
  @Override
  void stop() {
    System.out.println("Car stop!");
  }
}

Truck继承了Vehicle,并定义了具体的方法

package com.programcreek.designpatterns.templatemethod;
 
public class Truck extends Vehicle {
 
  @Override
  void start() {
    this.status = true;
  }
 
  @Override
  void run() {
    System.out.println("Run slowly!");
  }
 
  @Override
  void stop() {
    System.out.println("Truck stop!");
 
  }
}

testVehicle方法只接受Vehicle,他不关注是car还是truck,因为他们都一样的流程,这是一个面向接口编程。

import com.programcreek.designpatterns.templatemethod.Car;
import com.programcreek.designpatterns.templatemethod.Truck;
import com.programcreek.designpatterns.templatemethod.Vehicle;
 
public class Main {
  public static void main(String args[]){
    Car car = new Car();
    testVehicle(car);
 
    Truck truck = new Truck();
    testVehicle(truck);
  }
 
  public static void testVehicle(Vehicle v){
    v.testYourVehicle();
  }
}

模版方法模式实际使用

这个模式在Spring框架的DAO中有使用。 org.springframework.jdbc.core.JdbcTemplate 类有所有JDBC工作流中重复的代码块如update, query, execute, etc.

© 著作权归作者所有

共有 人打赏支持
奋斗到天明
粉丝 18
博文 112
码字总数 82707
作品 0
昌平
程序员
私信 提问
一天一种设计模式之十二-----模版方法模式

一.模版方法模式简介 模版方法模式属于行为型模式。 该模式定义一个操作中算法的框架,而将一些步骤延迟到了子类中,使得子类可以不改变算法的结构即可重新定义算法中的某些特定步骤。 模版方...

tongqu
2016/03/21
76
0
java常见的几种设计模式

设计模式 1、概述 1)设计模式(Design pattern):是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结; 2)分类: 创建型模式(创建对象的): 单例模式、抽象工厂模式、建造者...

走了丶
2017/08/27
0
0
人人都会设计模式---模版方法模式--Template-Method

PS:转载请注明出处 作者: TigerChain 地址: www.jianshu.com/p/6c6191a47… 本文出自 TigerChain 简书 人人都会设计模式 教程简介 1、阅读对象 本篇教程适合新手阅读,老手直接略过 2、教程...

TigerChain
2017/12/11
0
0
08、模版方法模式--Template-Method

模版方法模式大纲 PS:转载请注明出处 作者: TigerChain 地址: http://www.jianshu.com/p/6c6191a47197 本文出自 TigerChain 简书 人人都会设计模式 教程简介 1、阅读对象 本篇教程适合新手阅...

TigerChain
2017/12/10
0
0
Java设计模式陈列

我们并不需要自己造轮子。这么多年以来,遭遇同样问题的人们早已发现了许多很棒的解决方案,而且把它们标准化过了。我们管这些方案叫设计模式。 --《我给媳妇解释设计模式》 设计模式详细的介...

小卒搬砖
2016/11/04
46
0

没有更多内容

加载失败,请刷新页面

加载更多

新手也能看懂,消息队列其实很简单

该文已加入开源项目:JavaGuide(一份涵盖大部分Java程序员所需要掌握的核心知识的文档类项目,Star 数接近 16k)。地址:https://github.com/Snailclimb/JavaGuide. 本文内容思维导图: 消息...

阿里云官方博客
19分钟前
1
0
如何在Chrome浏览器中启动deviceready事件(尝试调试phonegap项目)?

我正在开发PhoneGap应用程序,我希望能够在Chrome中调试它,而不是在电话上调试。但是,我在onGetReady()函数中初始化我的代码,该函数在PhoneGap触发“deviceready”事件时触发。由于Chr...

kisshua
今天
9
0
nginx中部署vue打包后的静态文件

如何在nginx中部署静态资源就不描述了, 请看我的这篇博客 将vue脚手架项目打包后的静态文件放到nginx上, 发现有个问题, 即url上有#, 怎么去掉这个#呢. 1 项目中router的mode 路由的mode要为h...

克虏伯
今天
13
0
JS容易理解错误的地方

在这端代码执行的末尾,你会不会hi变量回事函数中的hi了?你会不会认为这不是按引用传递了? 对值传递和引用传递产生质疑了? 1 var hi = {};2 function sayHello(hi) { ...

器石_
今天
9
0
Java开发学习--MongoDB

之前只学过sql,第一次使用非关系型数据库。以前对于关系型数据库与非关系型数据库的概念很模糊,通过这次的学习对这两者有了一个清晰的概念。 主键 在MongoDB中,主键名叫"_id",如果在生成...

微笑向暖wx
今天
6
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部