模板方法模式(Template)

做一件事情,流程是固定的,其中存在不确定的同一类事务。

例如:

  去店里吃饭:1、进入店铺。2、点单。3、吃饭。

  不确定的是第二步:点单。

实现:

  在父类中定义好统一的处理步骤(为不可重写的方法 final ),由子类实现不同的步骤后,调用统一的处理步骤。一般可以使用匿名内部类简化。


 

比如我从睡醒到出门上班这一流程。

父类:

public abstract class Template {
    public void first(){
        System.out.println("第一步:睁开眼睛!");
    }
    //待实现的方法
    public abstract void second();

    public void end(){
        System.out.println("最后一步:出门上班!");
    }

    //处理步骤在父类中定义好
    public final void doSomethings(){
        first();
        second();//像个钩子,执行时挂哪个子类就调用哪个子类的方法
        end();
    }
}

子类:

class Second extends Template{
    @Override
    public void second() {
        System.out.println("第二步:穿衣服、洗漱、照镜子、吃早餐");
    }
}

测试:

public class Client{
    public static void main(String[] args) {
        Second s = new Second();
        s.doSomethings();
        System.out.println("-----------------");

        //使用匿名内部类
        Template s2 = new Template() {
            @Override
            public void second() {
                System.out.println("第二步:吃饭饭");
            }
        };
        s2.doSomethings();
    }
}

测试结果:

 

posted @ 2022-11-26 20:03  在博客做笔记的路人甲  阅读(90)  评论(0编辑  收藏  举报