zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    深度图像的获取原理
    第二章 排序 || 第19节 最短子数组练习题
    第二章 排序 || 第18节 有序矩阵查找练习题
    tensorflow 之tf.nn.depthwise_conv2d and separable_conv2d实现及原理
    tensorflow 之常见模块conv,bn...实现
    机器学习中的训练数据不平衡问题
    一些智力题
    Pytoch 抽取中间层特征方法
    娱乐一下
    java访问ad域
  • 原文地址:https://www.cnblogs.com/stu-jyj3621/p/14361454.html
Copyright © 2011-2022 走看看