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

原创
2015/08/27 17:40
阅读数 48

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

类图

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.

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部