当前位置: 首页 > news >正文

有什么网站建设软件秦皇岛建设工程

有什么网站建设软件,秦皇岛建设工程,wordpress清理,好单库如何做网站1. 认识模板方法模式 1.1 模式定义 定义一个操作算法中的框架#xff0c;而将这些步骤延迟加载到子类中。 它的本质就是固定算法框架。 1.2 解决何种问题 让父类控制子类方法的调用顺序 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 1.3…1. 认识模板方法模式 1.1 模式定义 定义一个操作算法中的框架而将这些步骤延迟加载到子类中。 它的本质就是固定算法框架。 1.2 解决何种问题 让父类控制子类方法的调用顺序 模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 1.3 模式好处 开发人员在开发时只需要考虑方法的实现。不需要考虑方法在何种情况下被调用。实现代码复用。 1.4 模式适合场景 一次性实现一个算法的不变部分并将可变的行为留给子类来实现。各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。需要通过子类来决定父类算法中某个步骤是否执行实现子类对父类的反向控制。 2. 模式结构与实例讲解 2.1模式结构 模板方法模式结构图 如模板方法模式结构图所知有两个类 AblstractClass抽象类在抽象类中定义了一系列的操作PrimitiveOperation每个操作可以使具体的也可以是抽象的每个操作对应一个算法的步骤在子类中可以重新定义或实现这些步骤。TmplateMethod()这个方法用于定义一个算法结构模板方法不仅可以调用在抽象类中实现的基本方法也可以调用在抽象类的子类中实现的基本方法还可以调用其他对象中的方法。ConcreteClass具体子类用于实现在父类中声明的抽象基本操作也可以覆盖在父类中已经实现的具体基本操作。 2.2 实例讲解 创建一个抽象模板结构AblstractClass好父亲 public abstract class AblstractClass {//模板方法用来控制子类的顺序 要想有人生必须按老爸的人生顺序来 //声明final不让子类覆盖这个方法防止改变人生顺序public final void 人生(){学习();工作();爱情();}//家里穷更得用工学习public void 学习(){System.out.println(每天晚上趴在邻居窗上学习);}//工作必须稳定public void 工作(){ System.out.println(从一而终);}//恋爱自由 让儿子自由恋去public abstract void 爱情();}创建一个具体模板ConcreteClass好儿子 public class ConcreteClass extends AblstractClass {//儿子不认可父亲的学习方法 考高分影响同学关系Overridepublic void 学习() {System.out.println(60分万岁...);}//父亲给我爱情自由 一定好好谈恋爱Overridepublic void 爱情() {System.out.println(肤白貌美大长腿...);}}调用他们的人生 public class TestMain {public static void main(String[] args) {ConcreteClass cs new ConcreteClass();cs.人生();}}结果输出 60分万岁... 从一而终 肤白貌美大长腿...3. 模式在Servlet中的应用 3.1 自己实现一下 浏览器向服务端发送一个请求常用请求方式有两种get请求和post请求这两种请求方式会导致请求参数在请求协议包Http包中的位置是不一样的那么请求协议包中不同的内容到达服务端之后会有不同的对象进行处理如请求头的内容由tomcat负责请求体中的内容由request负责所以此时开发人员在拿到service()方法后考虑到它可以接受所有请求方式因此会针对不同的请求方式封装不同的请求方法。 建一个OneServlet 继承GenericServlet实现service()方法需要重写里面的doPost和doGet方法。 public class OneServlet extends GenericServlet {Overridepublic void service(ServletRequest req, ServletResponse arg1) throws ServletException, IOException {//1.从协议包【请求行】中来读取浏览器发送的请求方式HttpServletRequest request (HttpServletRequest)req;//一般来说由父类修饰的对象由子类来修饰对象目的就是功能扩充String method request.getMethod();//POST GETif(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类实现中都需要写这么一段重复性的代码这样重复的开发既增加工作量又显得代码臃肿降低了系统耦合度。模板方法设计模式就是来解决这个问题的。下面看一下怎么解决。 建立MyHttpServlet类就是模板方法设计模式中的父类继承GenericServlet类。 public class MyHttpServlet extends GenericServlet {Overridepublic void service(ServletRequest req, ServletResponse res) throws ServletException, IOException {//控制子类中的doGet和doPost方法//1.从协议包【请求行】来读取浏览器发送的请求方式HttpServletRequest request (HttpServletRequest)req;String method request.getMethod();//POST GETif(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类,此时此刻开发人员不用去考虑何时调用doGet方法。当调用TwoServlet类的时候tomcat一定是调用它的service()方法。 /*** Servlet implementation class TwoServlet*/ public class TwoServlet extends MyHttpServlet {//选择是接受doGet方法还是doPost方法Overridepublic void doGet(ServletRequest arg0, ServletResponse arg1) {System.out.println(ThreeServlet doGet is run...);}}测试代码localhost:8080/.../... ThreeServlet doGet is run... 3.2 看HttpServlet源码 HttpServlet也是继承了GenericServlet 跟踪找到Service()方法发现有两个service()方法。 //这个方法是从它的父类GenericServlet继承过来的Overridepublic 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 logicdoGet(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 lessmaybeSetLastModified(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修饰就彻底断绝了我们下游开发人员的开发这样是降低了系统的灵活度。 设计模式是问题解决思想办法没有固定的命令搭配 。 如果我们自己可以有这样一些解决办法那就是好的设计模式。 使用场景 tomcat中生命周期中触发事件后变更事件状态和相应动作处理
http://wiki.neutronadmin.com/news/144544/

相关文章:

  • 如何建立网站链接房屋出租网站模板
  • oa办公系统网站开发网站帮企业做推广价格怎么算
  • 网站制作视频教程下载评价一个网站设计项目的好坏
  • 域名问题网站不更新对电子商务专业的认识和了解
  • 樱桃企业网站管理系统梁山专做网站的公司
  • 用花生壳做网站速度可以吗wordpress免费汉化主题
  • 哈尔滨模板建站定制网站西安网络优化大的公司
  • 滑县网站建设策划上海建筑建材业网站迁移
  • 济南公司建设网站wordpress调模板用钩子
  • 网站建设市区宁波正规品牌网站设计
  • 电子商务企业网站建设规划方案成立广告公司需要什么条件
  • 怎样在微信中做网站wordpress 火车头发布
  • 网站建设 坚持实用原则建设直播网站需要哪些许可证
  • 建立网站的正确方法找回原来的百度
  • 哈尔滨 网站建设网站seo外链平台
  • 网站 黑白竞价推广托管公司介绍
  • 松江做网站的公司wordpress不能自定义
  • 德州网站建设视频不可添加橱窗入口
  • soho建网站 必须先注册公司吗公司的网站建设费入什么科目
  • 如何免费制作一个网站wordpress sql 注入
  • 网站开发 wenzhou建站推荐
  • 建站快车代理平台系统大良网站设计价位
  • 销售推广案例网站岑溪网络推广营销
  • 个人宽带备案网站百货店怎么做网站送货
  • 新开传奇网站发布站文章网站模板哪个好
  • 宁波网站设计公司哪个好河南城乡和住房建设厅网站
  • 重庆网站建设技术外包wordpress修改 版权
  • 去哪个网站做农产品推广网站建设wuhan
  • 企业网站优化的方式商务网站策划书
  • 建设博客网站步骤合肥市建设局