设计模式之模板方法

发布于:2024-12-06 ⋅ 阅读:(21) ⋅ 点赞:(0)

        模板方法是进行程序设计时经常用到的设计模式。很多人虽然可能甚至没有学过设计模式,但在框架思维的作用下,依然使用到了它。模板方法的思想就在于,父类将骨架定好,子类根据需要自定义变化的部分。

我们看一下下面的示例代码:

public class TemplateMethod {
    public static abstract class FatherClass {
        public void doSomeThing() {
            start();
            step1();
            step2();
            end();
        }

        protected void start() {
            // 父类提供默认行为,可被子类覆盖
            System.out.println("start step");
        }


        protected abstract void step1();

        protected abstract void step2();

        private void end() {
            System.out.println("end step");
        }
    }

    public static class ChildClass extends FatherClass {

        @Override
        protected void step1() {
            System.out.println("this step1 is done by ChildClass");
        }

        @Override
        protected void step2() {
            System.out.println("this step2 is done by ChildClass");
        }
    }

    public static void main(String[] args) {
        FatherClass child = new ChildClass();
        child.doSomeThing();
    }
}

        父类中doSomeThing代表一个业务逻辑,它需要四个特定的步骤执行。其中end是通用逻辑,代表通用不变的部分;start提供了默认的实现,但可被子类重写覆盖,代表相对不变的部分。而step1和step2则是需要子类提供,代表可变的业务逻辑。注意:这里可变、不变的顺序不是固定的,根据实际业务场景而定,也有可能是中间不变,开始和结尾部分是变化的。

我们运行一下代码:可以看到,实际的效果:

        我们看一下Spring中的模板方法例子:

在doClose方法中也做了好几个事情,大部分都是公共的实现。只有closeBeanFactory是需要子类自行实现。而在onClose中也提供了默认实现,但运行子类自行决定是否需要做些什么,这个其实是预留的钩子,运行子类自行实现它想在关闭时做的任何事,虽然父类也不清楚这些事是啥。


网站公告

今日签到

点亮在社区的每一天
去签到