分享

GoF设计模式之二十二 Template- -

 wtf_soft 2005-07-22

 

    C10) Template(模板模式)
    定义:定义一个操作的算法的框架,将一些步骤的实现推迟到子类。模板模式在不改变算法结构的前提下,允许子类重定义算法的某些步骤。
    模板模式非常好的利用了继承重载的特性,先给出操作要实现的步骤大纲,暂缓某些步骤的实现,把这部分交由不同的子类来完成。这个模式就像平时常做的填写表格,表格就是模板,每张填写好的表格都是这个模板的一个子类。
    现在假设要实现一个数据复制的功能,我们将这个功能分为几个步骤:1)打开数据源和目标 3)读取数据 4)数据格式化 5)写入数据 6)关闭,生成模板类如下
    public abstract class CopyTemplate {
        public abstract void open();
        public abstract void getData();
        public abstract void formatData();
        public abstract void putData();
        public abstract void close();
        public void doCopy() {
            open();
            getData();
            formatData();
            putData();
            close();
        }
    }

    接下来,需要实现一个从数据库复制到文件的功能
    public class DB2File extends CopyTemplate {
        public void open() {
            //建立数据库连接
            //创建文件访问对象
        }
        public void getData() {
            //查询操作,取得ResultSet
        }
        public void formatData() {
            //格式化数据
        }
        public void putData() {
            //写文件
        }
        public void close() {
            //关闭数据库连接
            //关闭文件访问对象
        }
    }

    如果需要文件向数据库复制
    public class File2DB extends CopyTemplate {
        public void open() {
            //建立数据库连接
            //创建文件访问对象
        }
        public void getData() {
            //读文件
        }
        public void formatData() {
            //格式化数据
        }
        public void putData() {
            //生成InsertQuery并执行
        }
        public void close() {
            //关闭数据库连接
            //关闭文件访问对象
        }
    }

    调用的时候
    CopyTemplate action1 = new DB2File();
    action1.doCopy();
    CopyTemplate action2 = new File2DB();
    action2.doCopy();

    上面模板用到了抽象类,主要是为了强制子类实现。对于doCopy()方法,可以加上final关键字声明,这样子类就无法重载了。
 

   参考:
1、 http://www./designpatterns/template.htm(中文、java实例)
2、 http://www./Patterns/PatternCommand.aspx(英文、C#实例、UML)
3、 http://www.caterpillar./PmWiki/pmwiki.php/DesignPattern/TemplateMethod(中文、java实例、UML)推荐
4、 http://www./tech/DesignPattern/TemplateMethod.html(日文、java实例、UML)推荐

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多