java 行为型模式 模板模式

来源:互联网 发布:4g网络费流量吗 编辑:程序博客网 时间:2024/06/07 12:51

模板方法模式

定义一个操作中的算法骨架,而将一些步骤延伸到子类中去,使得子类可以不改变一个算法的结构,即可重新定义改算法的某些特定步骤。这里需要复用的是算法的结构,也就是步骤,而步骤的实现可以在子类中完成。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。
使用场合 
1)一次性实现一个算法的不变部分,并且将可变的行为留给子类来完成。
2)各子类公共的行为应该被提取出来并集中到一个公共父类中以避免代码的重复。首先识别现有代码的不同之处,并且把不同部分分离为新的操作,最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
3)控制子类的扩展

模板方法模式的组成

父类角色:提供模板。

子类角色:为模板提供实现。


抽象模板(Abstract Template)角色有如下责任:


  ■  定义了一个或多个抽象操作,以便让子类实现。这些抽象操作叫做基本操作,它们是一个顶级逻辑的组成步骤。


  ■  定义并实现了一个模板方法。这个模板方法一般是一个具体方法,它给出了一个顶级逻辑的骨架,而逻辑的组成步骤在相应的抽象操作中,推迟到子类实现。顶级逻辑也有可能调用一些具体方法。


  具体模板(Concrete Template)角色又如下责任:


  ■  实现父类所定义的一个或多个抽象方法,它们是一个顶级逻辑的组成步骤。


  ■  每一个抽象模板角色都可以有任意多个具体模板角色与之对应,而每一个具体模板角色都可以给出这些抽象方法(也就是顶级逻辑的组成步骤)的不同实现,从而使得顶级逻辑的实现各不相同。

UML类图




看代码:
/** * 抽象模板 * @author lm * */public abstract class DateObject {public abstract void Connect();public abstract void Select();public abstract void Process();public abstract void Disconnect();//模板方法public void Run(){this.Connect();this.Select();this.Process();this.Disconnect();}}

package com.Template;public class CustomerDateObject extends DateObject{private String coonectionString = "jdbcURL";private String commandString;private DateSet dataSet;private SqlConnection dataConnection;/** * 建立数据库链接 */@Overridepublic void Connect() {// TODO Auto-generated method stubdataConnection = new SqlConnection(coonectionString);dataConnection.Open();}/** * 查询数据 */@Overridepublic void Select() {// TODO Auto-generated method stubcommandString = "select username from person ";.......}/** * 打印数据库 */@Overridepublic void Process() {// TODO Auto-generated method stub}/** * 断开链接 */@Overridepublic void Disconnect() {// TODO Auto-generated method stub}}

public class Client {public static void mian(String[] args){CustomerDateObject dataObject = new CustomerDateObject();dataObject.Run();}}