java设计模式之模板方法模式

定义:Define the skeleton of an algorithm in an operation, deferring some steps to subclasses. Template Method lets subclasses redefine certain steps of an algorithm without changing the algorithm’s stucture. 即为某一操作我们确定一种算法框架,但却将其某些步骤延迟到子类完成,使得子类可以在不改变该算法架构的情况下确定其特定实现步骤。换句话说,父类将某操作拆分成多个细小的操作,而让子类去确定如何完成这些细小的操作,父类只需要定义这些操作的执行顺序,从而完成特定的事情
而在父类(称为抽象模板)中,这些被拆分得到的细小操作被称为基本方法,具体由子类去实现,而父类中实现的关于基本方法的调用顺序的方法称为模板方法
首先,先列出一个典型的类图:
这里写图片描述
其中,AbstractClass为抽象模板,其基本方法step0()和step1()由子类去实现,而在模板方法templateMethod()中定义了其调用过程。下面的例子以中西方吃饭过程为例,看代码:

/**
 * Created by Song on 2016/9/6.
 * 抽象模板
 */
public abstract class AbstractClass {
    //步骤0(基本方法)
    protectedabstract void step0();
    //步骤1(基本方法)
    protectedabstract void step1();
    //模板方法
    public void templateMethod(){
        //确定基本方法的调用顺序,完成特定功能
        this.step0();
        this.step1();
    }
}
**
 * Created by Song on 2016/9/6.
 * 具体类1
 */
public class ConcreteClass1 extends AbstractClass {
    @Override
    protectedvoid step0() {
        System.out.println("步骤0:拿起筷子");
    }

    @Override
    protectedvoid step1() {
        System.out.println("步骤1:开始吃饭");
    }
}
**
 * Created by Song on 2016/9/6.
 */
public class ConcreteClass2 extends AbstractClass {
    @Override
    protectedvoid step0() {
        System.out.println("步骤0:拿起刀叉");
    }

    @Override
    protectedvoid step1() {
        System.out.println("步骤1:开始吃饭");
    }
}
**
 1. Created by Song on 2016/9/6.
 2. 测试类
 */
public class Main {
    public static void main(String [] args){
        //中国人的吃饭方式
        System.out.println("中国人吃饭过程:");
        AbstractClass chinese = new ConcreteClass1();
        chinese.templateMethod();
        //西方人的吃饭方式
        System.out.println("西方人吃饭过程:");
        AbstractClass foreigner = new ConcreteClass2();
        foreigner.templateMethod();
    }
}

执行结果:
这里写图片描述
其典型特点为:
1. 封装不变部分,扩展可变部分
2. 行为由父类控制,而具体细节由子类根据实际需要实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值