侧边栏壁纸
博主头像
Elltor

用心发现生活,积极面对工作、事,坚持每天让自己进步一点。

  • 累计撰写 169 篇文章
  • 累计创建 1 个标签
  • 累计收到 12 条评论
标签搜索

目 录CONTENT

文章目录

设计模式|模板方法

Elltor
2020-10-29 / 0 评论 / 0 点赞 / 110 阅读 / 1,486 字 / 正在检测是否收录...

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

类关系

            +--------------------+
            |      AbstractClass |
            +-^-----------^------+
  extends     |           |
         +----+           +--+ extends
         |                   |
+--------+--------+    +-----+------------+
|    ImplClassA   |    |  ImplClassB      |
+-----------------+    +------------------+
public abstract class AbstractClass {
    abstract void methodA();

    abstract void methodB();

    abstract void methodC();

    void executeTemplateMethod() {
        methodA();
        methodB();
        methodC();
    }
}
public class ImplClassA extends AbstractClass {
    @Override
    void methodA() {
        System.out.println("ClassA的methodA方法执行了");
    }

    @Override
    void methodB() {
        System.out.println("ClassA的methodB方法执行了");
    }

    @Override
    void methodC() {
        System.out.println("ClassA的methodA方法执行了");
    }
}
public class ImplClassB extends AbstractClass {
    @Override
    void methodA() {
        System.out.println("ClassB的methodA方法执行了");
    }

    @Override
    void methodB() {
        System.out.println("ClassB的methodB方法执行了");
    }

    @Override
    void methodC() {
        System.out.println("ClassB的methodA方法执行了");
    }
}
    public static void main(String[] args) {
        AbstractClass templateMethod;

        templateMethod = new ImplClassA();
        templateMethod.executeTemplateMethod();
        System.out.println("--------------------");
        templateMethod = new ImplClassB();
        templateMethod.executeTemplateMethod();
    }
//输出
ImplClassA的methodA方法执行了
ImplClassA的methodB方法执行了
ImplClassA的methodA方法执行了
--------------------
ImplClassB的methodA方法执行了
ImplClassB的methodB方法执行了
ImplClassB的methodA方法执行了

虽然ImplClassA和ImplClassB中无没有覆盖executeTemplateMethod方法, 但是调用时仍然执行两个实现类中覆盖的methodA、methodB、methodC

0

评论区