首页 > 其他 > 详细

3、Template Method 模板方法 行为型设计模式

时间:2020-07-21 12:56:00      阅读:139      评论:0      收藏:0      [点我收藏+]

1

1.1

1.2

使

1.3

1.4

2

..,.,

..,,.,

2.1

AbstractDisplay

package cn.design.template;

/**
* @author lin
* @version 1.0
* @date 2020-07-15 17:09
* @Description , 
*/
public abstract class AbstractDisplay {
   public abstract void join();

   public abstract void execute();

   public abstract void exit();

   /**
    * 
    */
   public final void display() {
       join();
       execute();
       exit();
  }

}

2.2

SalesmanDisplayAbstractDisplay

package cn.design.template;

/**
* @author lin
* @version 1.0
* @date 2020-07-15 17:14
* @Description  
*/
public class SalesmanDisplay extends AbstractDisplay {
   /**
    * 
    */
   String name;

   public SalesmanDisplay(String name) {
       this.name = name;
  }

   @Override
   public void join() {
       System.out.println("------- start -------");
       System.out.println("-- " + this.name + " --");
       System.out.println("--  ,  ,  ");
  }

   @Override
   public void execute() {
       System.out.println("----------- look --------");
       System.out.println(" ,, ");
  }

   @Override
   public void exit() {
       System.out.println("----------- exit ---------");
       System.out.println(",");
  }
}

2.3

ManagerDisplayAbstractDisplay

package cn.design.template;

/**
* @author lin
* @version 1.0
* @date 2020-07-15 17:14
* @Description   
*/
public class ManagerDisplay extends AbstractDisplay {
   /**
    * 
    */
   String name;

   public ManagerDisplay(String name) {
       this.name = name;
  }

   @Override
   public void join() {
       System.out.println("------- start -------");
       System.out.println("-- " + this.name + " --");
       System.out.println("--  ,  , ");
  }

   @Override
   public void execute() {
       System.out.println("----------- look --------");
       System.out.println(" , ,,98");
       System.out.println(" , , ");
  }

   @Override
   public void exit() {
       System.out.println("----------- exit ---------");
       System.out.println(",,,");
  }
}

2.4Main

package cn.design.template;

/**
* @author lin
* @version 1.0
* @date 2020-07-15 16:09
* @Description TODO
*/
public class Main {
   public static void main(String[] args) {
       AbstractDisplay a1 = new SalesmanDisplay("");
       a1.display();
       System.out.println();
       AbstractDisplay a2 = new ManagerDisplay("ming");
       a2.display();
  }
}

------- start -------
--  --
--  ,  ,  
----------- look --------
,,
-----------  exit  ---------
,

------- start -------
-- ming --
--  ,  , 
----------- look --------
, ,,98
, ,
-----------  exit  ---------
,,,

3

Template Method

AbstractClass ()

AbstractClass使ConcreteClassAbstractDisplay

ConcreteClass ()

AbstractClassAbstractClassCharDisplaystringDisplay

 

4. Servlet

4.1

getpostHttptomcatrequestservice()

OneServlet GenericServletservice()doPostdoGet

public class OneServlet extends GenericServlet {

   @Override
   public void service(ServletRequest req, ServletResponse arg1) throws ServletException, IOException {
       
       
               //1.
               HttpServletRequest request = (HttpServletRequest)req;//
               String method = request.getMethod();//POST GET
               if("GET".equals(method)){
                   doGet(req, arg1);
              }else if("POST".equals(method)){
                   doPost(req, arg1);
              }    
  }
   //post
   public void doPost(ServletRequest arg0, ServletResponse arg1){
         //doPost
       
         System.out.println("doPost is run....");
  }
   
   //get
   public void doGet(ServletRequest arg0, ServletResponse arg1){
         //doPost
       
         System.out.println("doGet is run....");
  }
   
}

service()service()servlet

MyHttpServletGenericServlet

public  class MyHttpServlet extends GenericServlet {

   @Override
   public void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {
       //doGetdoPost
       //1.
       HttpServletRequest request = (HttpServletRequest)req;
       String method = request.getMethod();//POST GET
       if("GET".equals(method)){
           doGet(req, res);//this.doGet()
      }else if("POST".equals(method)){
           doPost(req, res);
      }
  }
   
   public  void doPost(ServletRequest arg0, ServletResponse arg1){
       
  }
   
   public void doGet(ServletRequest arg0, ServletResponse arg1){
       
  }
   
}

TwoServlet,doGetTwoServlettomcatservice()

/**
* Servlet implementation class TwoServlet
*/
public class TwoServlet extends MyHttpServlet {
   
   //doGetdoPost
   
   @Override
   public void doGet(ServletRequest arg0, ServletResponse arg1) {
         System.out.println("ThreeServlet doGet is run...");
  }
   
}

localhost:8080/.../...

ThreeServlet doGet is run...

 

5TomcatHttpServlet

HttpServletGenericServlet Service()service()

   //GenericServlet
   @Override
   public void service(ServletRequest req, ServletResponse res)
       throws ServletException, IOException
  {  
       HttpServletRequest  request;
       HttpServletResponse response;
       
       if (!(req instanceof HttpServletRequest &&
               res instanceof HttpServletResponse)) {
           throw new ServletException("non-HTTP request or response");
      }
       //
       request = (HttpServletRequest) req;
       response = (HttpServletResponse) res;

       service(request, response);//service
  }
}

service()

 protected void service(HttpServletRequest req, HttpServletResponse resp)
       throws ServletException, IOException
  {
       String method = req.getMethod();//

       if (method.equals(METHOD_GET)) {//
           long lastModified = getLastModified(req);
           if (lastModified == -1) {
               // servlet doesnt support if-modified-since, no reason
               // to go through further expensive logic
               doGet(req, resp);
          } else {
               long ifModifiedSince = req.getDateHeader(HEADER_IFMODSINCE);
               if (ifModifiedSince < lastModified) {
                   // If the servlet mod time is later, call doGet()
                   // Round down to the nearest second for a proper compare
                   // A ifModifiedSince of -1 will always be less
                   maybeSetLastModified(resp, lastModified);
                   doGet(req, resp);
              } else {
                   resp.setStatus(HttpServletResponse.SC_NOT_MODIFIED);
              }
          }

      } else if (method.equals(METHOD_HEAD)) {
           long lastModified = getLastModified(req);
           maybeSetLastModified(resp, lastModified);
           doHead(req, resp);

      } else if (method.equals(METHOD_POST)) {
           doPost(req, resp);
           
      } else if (method.equals(METHOD_PUT)) {
           doPut(req, resp);
           
      } else if (method.equals(METHOD_DELETE)) {
           doDelete(req, resp);
           
      } else if (method.equals(METHOD_OPTIONS)) {
           doOptions(req,resp);
           
      } else if (method.equals(METHOD_TRACE)) {
           doTrace(req,resp);
           
      } else {
           //
           // Note that this means NO servlet supports whatever
           // method was requested, anywhere on this server.
           //

           String errMsg = lStrings.getString("http.method_not_implemented");
           Object[] errArgs = new Object[1];
           errArgs[0] = method;
           errMsg = MessageFormat.format(errMsg, errArgs);
           
           resp.sendError(HttpServletResponse.SC_NOT_IMPLEMENTED, errMsg);
      }
  }

service使final使final

 


技术分享图片                

 

圈~

 

 注公众号

 

3、Template Method 模板方法 行为型设计模式

原文:https://www.cnblogs.com/naimao/p/13353385.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!