模板方法模式简介及使用示例

模板方法模式简介

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

使用示例

public abstract class AbstractClass {
    public void algorithmMethod(){
        System.out.println("公用算法实现");
        methodPart1();
        System.out.println("公用算法实现");
        methodPart2();
        System.out.println("公用算法实现");
    }

    protected abstract void methodPart1();
    protected abstract void methodPart2();

}
public class ConcreteClass1 extends AbstractClass {
    @Override
    public void methodPart1() {
        System.out.println("part1  class1");
    }

    @Override
    public void methodPart2() {
        System.out.println("part2  class1");
    }
}
public class ConcreteClass2 extends AbstractClass {
    @Override
    public void methodPart1() {
        System.out.println("part1  class2");
    }

    @Override
    public void methodPart2() {
        System.out.println("part2  class2");
    }
}
public class Client {
    public static void main(String[] args) {
        AbstractClass cls1 = new ConcreteClass1();
        AbstractClass cls2 = new ConcreteClass2();

        cls1.algorithmMethod();
        System.out.println("==================");
        cls2.algorithmMethod();
    }
}

结果输出:

公用算法实现
part1  class1
公用算法实现
part2  class1
公用算法实现
==================
公用算法实现
part1  class2
公用算法实现
part2  class2
公用算法实现

总结

优缺点

模板方法模式提供了一种公共代码抽出的思路:将一个方法拆分,然后在子类中实现方法的一部分。此时有效避免了一个方法中需要进行 if 判断造成的代码臃肿。

扩展联想学习

其他设计模式

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
模板方法模式(Template Method Pattern)是一种行为型设计模式,它定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 以下是一个使用模板方法模式的 Java 示例: ``` abstract class Game { abstract void initialize(); abstract void startPlay(); abstract void endPlay(); // 模板方法 public final void play(){ // 初始化游戏 initialize(); // 开始游戏 startPlay(); // 结束游戏 endPlay(); } } 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!"); } } 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(); } } ``` 在上面的示例中,我们定义了一个抽象类 `Game`,它有三个抽象方法 `initialize()`、`startPlay()` 和 `endPlay()`。这些方法被称为基本方法,由子类实现。 `Game` 类还有一个模板方法 `play()`,该方法定义了游戏的骨架,即游戏的初始化、开始和结束。这个方法是 `final` 类型的,因此子类不能覆盖它。 我们定义了两个子类 `Cricket` 和 `Football`,它们实现了基本方法。在 `TemplatePatternDemo` 类中,我们创建了一个 `Cricket` 对象和一个 `Football` 对象,并调用它们的 `play()` 方法。由于 `play()` 方法是模板方法,因此无论是 `Cricket` 还是 `Football`,它们都会按照相同的顺序执行游戏的初始化、开始和结束,但它们的具体实现是不同的。 运行上面的程序,你将会得到如下输出: ``` 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、付费专栏及课程。

余额充值