文档章节

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

奋斗到天明
 奋斗到天明
发布于 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.

奋斗到天明
粉丝 19
博文 112
码字总数 82707
作品 0
昌平
程序员
私信 提问
加载中
请先登录后再评论。
Netty那点事(三)Channel与Pipeline

Channel是理解和使用Netty的核心。Channel的涉及内容较多,这里我使用由浅入深的介绍方法。在这篇文章中,我们主要介绍Channel部分中Pipeline实现机制。为了避免枯燥,借用一下《盗梦空间》的...

黄亿华
2013/11/24
2W
22
Swift百万线程攻破单例(Singleton)模式

一、不安全的单例实现 在上一篇文章我们给出了单例的设计模式,直接给出了线程安全的实现方法。单例的实现有多种方法,如下面: class SwiftSingleton { } 这段代码的实现,在shared中进行条...

一叶博客
2014/06/20
3.5K
16
数据库表单生成器--SQLScreens

SQLScreens 是一个使用 Tcl/TK 编写的简单关系型数据库表单生成工具。可让你快速创建查询界面,并指定相应的表和字段。支持多种数据库,包括:MySQL, SQLite, and INFORMIX, and ODBC for o...

匿名
2013/02/17
937
0
基于 ThinkPHP 的内容管理系统--歪酷CMS

歪酷网站管理系统(歪酷CMS)是一款基于THINKPHP框架开发的PHP+MYSQL网站建站程序,本程序实现了文章和栏目的批量动态管理,支持栏目无限分类,实现多管理员管理,程序辅助功能也基本实现了常见的文...

鲁大在线
2013/02/19
7.1K
2
REST/HTTP 工具包--Spray

Spray 是一个开源的 REST/HTTP 工具包和底层网络 IO 包,基于 Scala 和 Akka 构建。轻量级、异步、非堵塞、基于 actor 模式、模块化和可测试是 spray 的特点。 示例代码: val responses: F...

匿名
2013/02/20
7.2K
0

没有更多内容

加载失败,请刷新页面

加载更多

Subversion存储库中“分支”,“标记”和“主干”的含义是什么?

问题: I've seen these words a lot around Subversion (and I guess general repository) discussions. 我已经在Subversion(我猜通用存储库)讨论中看到了很多这样的话。 I have been us......

富含淀粉
今天
5
0
《Java8实战》笔记(03):Lambda表达式

本文源码 Lambda 管中窥豹 可以把Lambda表达式理解为简洁地表示可传递的匿名函数的一种方式:它没有名称,但它有参数列表、函数主体、返回类型,可能还有一个可以抛出的异常列表。 Lambda表达...

巨輪
今天
7
0
从其他文件夹导入文件 - Importing files from different folder

问题: I have the following folder structure. 我有以下文件夹结构。 application/app/folder/file.py and I want to import some functions from file.py in another Python file which r......

javail
今天
22
0
大数据研发学习之路--Hadoop集群搭建

阅读编译文档 准备一个hadoop源码包,我选择的hadoop版本是:hadoop-2.7.7-src.tar.gz,在hadoop-2.7.7的源码 包的根目录下有一个文档叫做BUILDING.txt,这其中说明了编译hadoop所需要的一些...

DSJ-shitou
今天
8
0
OSChina 周五乱弹 —— 特么是别的公司派来的特洛伊木马吧?

Osc乱弹歌单(2020)请戳(这里) 【今日歌曲】 小小编辑推荐:《我会守在这里》- 毛不易 《我会守在这里》- 毛不易 手机党少年们想听歌,请使劲儿戳(这里) @FalconChen :股市连跪了五天,...

小小编辑
今天
77
2

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部