Servlet12—— GenericServlet

适配器

项目中的程序如果没有使用适配器模式,假如A、B、C类直接实现接口,其中m1,m2,m3方法是需要使用的,其它方法都给默认空实现,即让这些类直接实现这个接口,需要实现更多的方法代码,丑陋不够优雅!代码丑陋!

设计模式的分类:

  1. 创建型:解决对象的创建问题
  2. 行为型:该模式与方法、行为、算法有关的设计模式
  3. 结构型:更多类,更多的对象组合成更大的结构解决某个特定的问题

你听说过哪些设计模式?

  • Gof95(1995年,四人组提出的23种设计模式)
    • 单例模式

    • 工厂模式

    • 适配器模式

    • 迭代模式【集合】

    • 策略模式【集合】

    • 装饰器模式【IO流】

  • JavaEE设计模式

GenericServlet

1、我们目前所有的Servlet类直接实现了javax.servlet.Servlet接口,但是这个接口中有很多方法是目前不需要的,我们可能只需要编写service。直接实现Servlet接口代码丑陋,有必要在中间添加一个适配器,以后所有的Servlet类不再直接实现Servlet接口,应该去维承适配器类。

2、适配器除了可以让代码优雅之外,我们还可以在适配器中提供大量的方法,子类继承之后,可以在子类中直接使用,方便编程。

下面附上一个自己编写的GenericServlet类

package myweb;

import java.io.IOException;

import javax.servlet.Servlet;
import javax.servlet.ServletConfig;
import javax.servlet.ServletContext;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

/**
 * GenericServlet是一个适配器,这个适配器四十一个Servlet,以后javaweb程序员无需直接实现Servlet接口,去继承这个适配器即可。
 * 然后重写service方法。
 */
public abstract class GenericServlet implements Servlet {

    private ServletConfig config;
    
    @Override
    public final void init(ServletConfig config) throws ServletException {
        this.config = config;
        this.init();
    }

    /*
     * 若自初始化时刻需要执行一段特殊的程序,建议重写无参数的init方法。
     * */
    public void init() {
    }

    @Override
    public abstract void service(ServletRequest req, ServletResponse res) throws ServletException, IOException ;

    @Override
    public void destroy() {
    }
    
    @Override
    public ServletConfig getServletConfig() {
        return config;
    }
    
    @Override
    public String getServletInfo() {
        return "";
    }
    
    //-------------------------------以下的所有的方法都是扩展方法,方便程序的编写------------------------------------------------------
    public ServletContext getServletContext(){
        return getServletConfig().getServletContext();
    }
    
    //.................
    
}

其实,SUN公司已经帮我们编写了GenericServlet类,在javax.servlet.GenericServlet中。

下面是一个HelloServlet.java类

package myweb;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

//public class HelloServlet extends GenericServlet {
public class HelloServlet extends javax.servlet.GenericServlet {

    private static final long serialVersionUID = 1L;

    @Override
    public void init() {
        System.out.println("HelloServlet's init method execute");
    }

    @Override
    public void service(ServletRequest req, ServletResponse res)
            throws ServletException, IOException {
        System.out.println("HelloServlet's service method execute!");
    }
}

附、适配器模式的例子

CommIn.java

package adapter;

public interface CommIn {
    void m1();
    void m2();
    void m3();
    void m4();
    void m5();
    void m6();
    void m7();
    void m8();
}

Adapter.java

package adapter;


/*
 * 缺省适配器
 * */
abstract public class Adapter implements CommIn{

    @Override
    abstract public void m1() ;

    @Override
    abstract public void m2() ;

    @Override
    abstract public void m3() ;

    @Override
    public void m4() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void m5() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void m6() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void m7() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void m8() {
        // TODO Auto-generated method stub
        
    }

}

A.java

package adapter;

public class A extends  Adapter {

    @Override
    public void m1() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void m2() {
        // TODO Auto-generated method stub
        
    }

    @Override
    public void m3() {
        // TODO Auto-generated method stub
        
    }

}

B.java

package adapter;

public class B extends Adapter {

    @Override
    public void m1() {
    }

    @Override
    public void m2() {
    }

    @Override
    public void m3() {
    }

}

C.java

package adapter;

public class C extends Adapter {

    @Override
    public void m1() {
    }

    @Override
    public void m2() {
    }

    @Override
    public void m3() {
    }

}
转载请注明出处:https://www.cnblogs.com/stu-jyj3621
原文地址:https://www.cnblogs.com/stu-jyj3621/p/14361454.html