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

例如:

  去店里吃饭: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();
    }
}

测试结果:

 

原文地址:http://www.cnblogs.com/lurenjia-bky/p/16928183.html

1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长! 2. 分享目的仅供大家学习和交流,请务用于商业用途! 3. 如果你也有好源码或者教程,可以到用户中心发布,分享有积分奖励和额外收入! 4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解! 5. 如有链接无法下载、失效或广告,请联系管理员处理! 6. 本站资源售价只是赞助,收取费用仅维持本站的日常运营所需! 7. 如遇到加密压缩包,默认解压密码为"gltf",如遇到无法解压的请联系管理员! 8. 因为资源和程序源码均为可复制品,所以不支持任何理由的退款兑现,请斟酌后支付下载 声明:如果标题没有注明"已测试"或者"测试可用"等字样的资源源码均未经过站长测试.特别注意没有标注的源码不保证任何可用性