模板方法模式

 1.概述
 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构造函数的形式实现,然后声明一些抽象方法来迫使子类实现剩余的逻辑。不同的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现。这就是模板方法模式的用意。

 2.代码实现
 使用过Servlet的人都清楚,除了要在web.xml做相应的配置外,还需继承一个叫HttpServlet的抽象类。HttpService类提供了一个service()方法,这个方法调用七个do方法中的一个或几个,完成对客户端调用的响应。这些do方法需要由HttpServlet的具体子类提供,因此这是典型的模板方法模式。
 

// 模拟request请求类
class HttpServletRequest {
    String method;
    public String getMethod() {
        return method;
    }

    public void setMethod(String method) {
        this.method = method;
    }
}
//response类
class HttpServletResponse {
}
// 模拟HttpServlet类
abstract class HttpServlet {
    //模板service 方法,
    protected void service(HttpServletRequest req, HttpServletResponse resp) {
        //其它逻辑
        if (req.getMethod().equals("GET")) {
            doGet(req, resp);
        } else if (req.getMethod().equals("POST")) {
            doPost(req, resp);
        }
        //其它逻辑
    }
    public abstract void doGet(HttpServletRequest req, HttpServletResponse resp);
    public abstract void doPost(HttpServletRequest req, HttpServletResponse resp);
}
// 自定义的servlet类
class MyServlet extends HttpServlet{
    @Override
    public void doGet(HttpServletRequest req, HttpServletResponse resp) {
        // TODO Auto-generated method stub
        System.out.println("MyServlet->doGet()           method:" + req.getMethod());
    }
    @Override
    public void doPost(HttpServletRequest req, HttpServletResponse resp) {
        // TODO Auto-generated method stub
        System.out.println("MyServlet->doPost()           method:" + req.getMethod());
    }

}
//--------------main测试------------------
    public static void main(String[] args) {
        HttpServlet servlet = new MyServlet();
        HttpServletRequest request = new HttpServletRequest();
        // 模拟post请求
        request.setMethod("POST");
        // 执行 service
        servlet.service(request, new HttpServletResponse());
        // 模拟get请求
        request.setMethod("GET");
        // 执行 service
        servlet.service(request, new HttpServletResponse());
    }

执行结果:
MyServlet->doPost()           method:POST
MyServlet->doGet()           method:GET

HttpServlet 中 的service规定了一套执行模板(方法的执行),子类 只需实现自己的具体不同的实现方法便可。

老生常谈:深圳有爱好音乐的会打鼓(吉他,键盘,贝斯等)的程序员和其它职业可以一起交流加入我们乐队一起嗨。我的QQ:657455400

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值