我理解的--java模板方法模式

时光总嘲笑我的痴心妄想 提交于 2019-12-06 06:45:07

从语言层次的角度只是单纯的抽象类的实现,在抽象类中哪些方法是抽象的,哪些需要子类实现,就需要业务上的要求了。使框架的分工更清晰,哪些人做哪些工作(架构师构造框架不可变、算法师实现算法可变),此模板简单而常用。

抽象方法:需要子类实现的,不同的子类提供了不同的实现功能。(可变)

模版方法:定义了主逻辑功能,里面用抽象方法来实现不同的功能。(不可变)

抽象类

public abstract class Template {
    abstract void sort(int[] arr);

    void printArray(int[] arr) {
        sort(arr);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}

具体实现子类:实现抽象类,不同的子类用不同的方法实现。

class TemplateImp extends Template {

    @Override
    void sort(int[] arr) {
        for (int i = 0; i < arr.length-1; i++) {
            for(int j = i; j < arr.length-1; j++){
                if (arr[i] > arr[j + 1]) {
                    int t;
                    t = arr[i];
                    arr[i] = arr[j + 1];
                    arr[j + 1] = t;
                }
            }
            
        }

测试类:

class Test {

    public static void main(String[] args) {
        int[] arr = { 6, 2, 1, 5, 8, 4 };
        Template template = new TemplateImp();
        template.printArray(arr);
    }

}

结果:

1
2
4
5
6
8

模板定义了两个函数,排序和打印,排序可以用不同的子类实现不同的排序方法(可变),而打印是不可变的,不需要子类实现。在现实中实现(引用别人的话):

大部分刚步入职场的毕业生应该都有类似B的经历。一个复杂的任务,由公司中的牛人们将主要的逻辑写好,然后把那些看上去比较简单的方法写成抽象的,交给其 他的同事去开发。这种分工方式在编程人员水平层次比较明显的公司中经常用到。比如一个项目组,有架构师,高级工程师,初级工程师,则一般由架构师使用大量 的接口、抽象类将整个系统的逻辑串起来,实现的编码则根据难度的不同分别交给高级工程师和初级工程师来完成。怎么样,是不是用到过模版方法模式?


易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!