码迷,mamicode.com
首页 > 其他好文 > 详细

模板方法模式(Template Method)

时间:2014-08-14 13:54:48      阅读:173      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   ar   2014   div   

1、定义


模板方法模式(Template Method Pattern),定义一个操作中的算法的框架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

2、通用类图


bubuko.com,布布扣

AbstractClass 叫抽象模板,它的方法分为两类:基本方法、模板方法

  • 基本方法:基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用
  • 模板方法:可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调度,完成固定的逻辑。

为防止恶意的操作,一般模板方法都加上final关键字,不允许被覆写。

具体模板:实现父类所定义的抽象方法,也就是父类定义的基本方法在子类中得以实现。

3、通用类代码


package Template;
/**
 *抽象模板类
 * 2014-8-14上午10:51:32-limiracle
 */
public abstract class AbstractClass {
    //基本方法
    protected abstract void doSomething();
    //基本方法
    protected abstract void doAnything();
    //模板方法
    public final void templateMethod(){
        /*
         * 调用基本方法,完成相关的逻辑
         */
        this.doAnything();
        this.doSomething();
    }
}
package Template;

public class ConcreteClass extends AbstractClass {
    //实现基本方法
    protected void doSomething() {
        //业务逻辑处理
    }
    protected void doAnything() {
        //业务逻辑处理
    }
}
package Template;

public class ConcreteClass1 extends AbstractClass {
    //实现基本方法
    protected void doSomething() {
        //业务逻辑处理
    }
    protected void doAnything() {
        //业务逻辑处理
    }
}
package Template;

public class Main {
    public static void main(String[] args) {
        AbstractClass class1=new ConcreteClass1();
        AbstractClass class2=new ConcreteClass();
        //调用模板方法
        class1.templateMethod();
        class2.templateMethod();
    }

}

4、杂谈


模板方法模式封装了不变的部分,扩展了可变的部分。它把认为是不变部分的算法封装到父类实现,而可变部分则可以通过继承来继续扩展。基本方法是由子类实现的,因此子类可以通过扩展的方式增加相应的功能,符合开闭原则。

按照我们的设计习惯,抽象类负责声明最抽象,最一般的事物属性和方法,实现类完成具体的事物属性和方法。但是模板方法模式却颠倒了,抽象类定义了部分抽象方法,由子类实现,子类代码执行的结果影响了父类的结果,也就是子类对父类产生了影响。

模板方法模式实现了父类依赖子类的场景。可以理解为父类调用了子类的具体方法。

模板方法模式(Template Method),布布扣,bubuko.com

模板方法模式(Template Method)

标签:style   blog   http   color   os   ar   2014   div   

原文地址:http://www.cnblogs.com/limiracle/p/3912085.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!