模板模式



模板模式


1. 介绍

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

简单理解:完成一件事情需要固定的几个步骤,但每一个步骤根据对象的不同会有不同的细节;就可以在父类中定义一个完成该事情的总方法(模板),按照完成事情的步骤去调用其每个步骤的实现方法,每个步骤的实现方法,由子类去完成。


优点

  1. 将每个步骤的具体实现延迟到子类中。父类只是定义了一个骨架,具体的实现是靠的子类,但子类不会更改父类的这种骨架。
  2. 代码复用。将骨架抽取到父类中,具体的细节则靠子类实现。

缺点

  1. 会增加类的数量

注意

策略和模板的区别:
策略在于结果一致,路径不同;而模板是在于,步骤一致,结果不一致。


2. 例子

将所有的家务活都分为三步,将这三个步骤执行的顺序在 HouseWork 这个抽象类中定义好。有洗衣服、扫地这两个具体的家务活,它们都继承了 HouseWork 这个父类,对其中的每一个步骤进行实现。


类图:
在这里插入图片描述

HouseWork类
是一个抽象类,所有家务活都需要继承这个抽象类。

package templatePattern;

/**
 * 做家务活,定义了模板,细节由子类去实现
 * 
 * @author jxd
 * @since 2021-06-16
 */
public abstract class HouseWork {
    /**
     * 做家务的模板
     */
    final public void work() {
        first();
        second();
        last();
    }

    public abstract void first();

    public abstract void second();

    public abstract void last();
}

SweepFloor类
扫地,继承了HouseWork这个抽象类,将其中的细节实现。

package templatePattern;

/**
 * 扫地
 * @author jxd
 * @since 2021-06-16
 */
public class SweepFloor extends HouseWork {

    @Override
    public void first() {
        System.out.println("找到扫把");
    }

    @Override
    public void second() {
        System.out.println("扫地");
    }

    @Override
    public void last() {
        System.out.println("将扫把放回原处");
    }

}

SweepClothes类
洗衣服,继承了HouseWork这个父类,实现了其中的细节。

package templatePattern;

/**
 * 洗衣服
 * @author jxd
 * @since 2021-06-16
 */
public class SweepClothes extends HouseWork {

    @Override
    public void first() {
        System.out.println("将脏衣服找到");
    }

    @Override
    public void second() {
        System.out.println("将脏衣服倒入洗衣机中,加入洗衣粉,启动洗衣机");
    }

    @Override
    public void last() {
        System.out.println("将洗好的衣服取出,拿到阳台去晒");
    }

}

测试类:

package templatePattern;

import org.junit.Test;

/**
 * 模板方法的测试类
 * 
 * @author jxd
 * @since 2021-06-16
 */
public class TestJ {
    @Test
    public void test1() {
        HouseWork sweepFloor = new SweepFloor();
        sweepFloor.work();
        
        HouseWork sweepClothes = new SweepClothes();
        sweepClothes.work();
    }
}

运行结果:

找到扫把
扫地
将扫把放回原处

将脏衣服找到
将脏衣服倒入洗衣机中,加入洗衣粉,启动洗衣机
将洗好的衣服取出,拿到阳台去晒

3. 总结

使用一个父类将完成一件事情的步骤的骨架定义好,至于其中的每一个步骤的具体实现过程则就由子类实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模板模式是一种行为设计模式,它定义了一个操作中的算法的骨架,将一些步骤延迟到子类中。模板模式使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。在Java中,模板模式通常由一个抽象类和一个或多个实现类组成。抽象类中定义了一个模板方法,该方法包含了算法的骨架,以及一些抽象方法,这些抽象方法由子类实现,以完成算法中的具体步骤。 以下是Java中模板模式的一个示例: ```java // 抽象类 abstract class Game { abstract void initialize(); abstract void startPlay(); abstract void endPlay(); // 模板方法 public final void play(){ // 初始化游戏 initialize(); // 开始游戏 startPlay(); // 结束游戏 endPlay(); } } // 实现类1 class Cricket extends Game { @Override void endPlay() { System.out.println("Cricket Game Finished!"); } @Override void initialize() { System.out.println("Cricket Game Initialized! Start playing."); } @Override void startPlay() { System.out.println("Cricket Game Started. Enjoy the game!"); } } // 实现类2 class Football extends Game { @Override void endPlay() { System.out.println("Football Game Finished!"); } @Override void initialize() { System.out.println("Football Game Initialized! Start playing."); } @Override void startPlay() { System.out.println("Football Game Started. Enjoy the game!"); } } // 演示类 public class TemplatePatternDemo { public static void main(String[] args) { Game game = new Cricket(); game.play(); System.out.println(); game = new Football(); game.play(); } } ``` 输出结果为: ``` Cricket Game Initialized! Start playing. Cricket Game Started. Enjoy the game! Cricket Game Finished! Football Game Initialized! Start playing. Football Game Started. Enjoy the game! Football Game Finished! ```

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值