设计模式(九)-模板方法

什么是模板方法模式?

模板方法(TemplateMethod),定义一个操作中的算法骨架,将一些步骤延迟到子类。模板方方法使得子类可以不改变算法结构,即可重定义算法的某些步骤。

简单来说,模板方法就是定义了做事情的步骤,而这些具体的步骤会根据需求少许改变,但总的步骤结构不变。

模板方法最大的优点在于将一些公共的不变的行为抽取出来以供复用,避免了代码重复。

模板模式结构图:
在这里插入图片描述

代码示例:

一个洗衣服的抽象类 WashingTemplate

/**
 * @Author DevinLei
 */
abstract class WashingTemplate {

    /**
     * 打开盖子
     **/
    abstract void openLid();

    /**
     * 放入衣服
     **/
    abstract void putClothes();

    /**
     * 放入洗衣液
     **/
    abstract void putWashliquid();

    /**
     * 关上盖子
     **/
    abstract  void closeLid();

    /**
     * 打开电源
     **/
    abstract  void openPower();

    /**
     * 开始洗涤
     **/
    public   void washStart(){
        System.out.println("开始洗涤");
    }

    public void washing(){
        openLid();
        putClothes();
        putWashliquid();
        closeLid();
        openPower();
        washStart();
    }
}

具体类PersonA

/**
 * @Author DevinLei
 */
public class PersonA extends  WashingTemplate {

    @Override
    void openLid() {
        System.out.println("左手打开盖子");
    }

    @Override
    void putClothes() {
        System.out.println("放入5件衣物");
    }

    @Override
    void putWashliquid() {
        System.out.println("放入立白洗衣液");
    }

    @Override
    void closeLid() {
        System.out.println("左手合上盖子");
    }

    @Override
    void openPower() {
        System.out.println("左手打开电源");
    }

}

具体类PersonB

**
 * @Author DevinLei
 */
public class PersonB extends WashingTemplate {
    @Override
    void openLid() {
        System.out.println("右手打开盖子");
    }

    @Override
    void putClothes() {
        System.out.println("放入7件衣物");
    }

    @Override
    void putWashliquid() {
        System.out.println("放入汰渍洗衣液");
    }

    @Override
    void closeLid() {
        System.out.println("右手合上盖子");
    }

    @Override
    void openPower() {
        System.out.println("右手打开电源");
    }
}

测试类 TestTemplate

/**
 * @Author DevinLei
 */
public class TestTemplate {

    public static void main(String[] args) {

        WashingTemplate person;

        person = new PersonA();
        person.washing();

        person = new PersonB();
        person.washing();
    }
}

运行结果:

左手打开盖子
放入5件衣物
放入立白洗衣液
左手合上盖子
左手打开电源
开始洗涤
右手打开盖子
放入7件衣物
放入汰渍洗衣液
右手合上盖子
右手打开电源
开始洗涤

Process finished with exit code 0

典型应用:
spring JDBC的设计实现上就是使用的模板方法模式

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值