简单的缺省适配器和模板方法设计模式

本文通过Servlet实例介绍了缺省适配器设计模式,通过创建抽象类提供默认实现,允许子类选择性覆盖方法。同时,探讨了模板方法设计模式,通过定义骨架逻辑,让子类实现细节。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在开发过程中使用一个接口并不需要使用这个接口中的所有方法,但是在语法的规定下又不得不使用,于是就需要使用缺省适配器设计模式,接下来就借助Servlet相关的例子来介绍一下这种设计模式

首先创建一个GenericServlet.java文件

//缺省适配器设计模式
public class GenericServlet implements Servlet,ServletConfig {
    private ServletConfig config;
    //模板方法设计模式
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.config = servletConfig;
    }


    @Override
    public ServletConfig getServletConfig() {
        return config;
    }

    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException ;

    @Override
    public String getServletInfo() {
        return null;
    }

    @Override
    public void destroy() {

    }

    @Override
    public String getInitParameter(String s) {
        return config.getInitParameter(s);
    }

    @Override
    public Enumeration<String> getInitParameterNames() {
        return config.getInitParameterNames();
    }

    @Override
    public ServletContext getServletContext() {
        return config.getServletContext();
    }

    @Override
    public String getServletName() {
        return config.getServletName();
    }
}

然后再类属性和想要使用的方法前面加上abstract

//缺省适配器设计模式
public abstract class GenericServlet implements Servlet,ServletConfig

//抽象方法,专门让子类来实现
@Override
public abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException ;

再创建一个SomeServlet.java文件来继承这个类使用这个方法

public class SomeServlet extends GenericServlet {
    @Override
    public void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {
        System.out.println("执行someServlet的service()方法");
        String param = this.getInitParameter("company");
        System.out.println(param);

        String servletName = this.getServletName();
        System.out.println(servletName);
    }

这就是一个非常简单的缺省适配器设计模式了。当然原本就已经可以直接调用GenericServlet这个类。这里只是借用它做个介绍。

再顺便讲一下模板方法设计模式,因为在GenericServlet这个类中使用了这种方式

重写init(ServletConfig servletConfig)方法

public void init() {
    }

并在原本的init方法中调用重写的方法

//模板方法设计模式
    @Override
    public void init(ServletConfig servletConfig) throws ServletException {
        this.config = servletConfig;
        //调用无参的init()方法
        init();
        System.out.println("----------------------");
    }

再让我们来到SomeServlet.java文件当中,重写父类的无参init方法

//重写父类的无参init()方法
    @Override
    public void init() {
        System.out.println("=====================");
    }

在GenericServlet中定义的无参init方法的目的就是让子类去进行重写来达到对它们进行灵活的运用的目的。这就是一个很简单的模板方法设计模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值