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

外贸网站建设注意做网站优化的关键词怎么设置

外贸网站建设注意,做网站优化的关键词怎么设置,wordpress评论表情,宝塔网站建设跳转微信可打开系列文章目录 【设计模式】之策略模式 【设计模式】之责任链模式 文章目录 系列文章目录 前言 一、什么是模板方法模式 定义 角色 二、为什么要使用模板方法模式 优点 缺点 三、案例 普通案例 模拟Servlet过程案例 总结 前言 今天给大家介绍23种设计模式中的模板方法模式这个设计模式在Spring框架中还是挺常见的手写Spring源码的小伙伴必须要掌握的设计模式之一文章结构还是经典的三连问是什么为什么怎么用 一、什么是模板方法模式 定义 模板方法模式法Template Method定义一个操作中的算法骨架而将算法的一些步骤延迟到子类中使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 角色  抽象类Abstract Class负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。 模板方法定义了算法的骨架按某种顺序调用其包含的基本方法。基本方法是实现算法各个步骤的方法。基本方法又可以分为三种 钩子方法(Hook Method) 在抽象类中已经实现包括用于判断的逻辑方法和需要子类重写的空方法两种。一般钩子方法是用于判断的逻辑方法这类方法名一般为isXxx返回值类型为boolean类型。具体方法(Concrete Method) 一个具体方法由一个抽象类或具体类声明并实现其子类可以进行覆盖也可以直接继承。抽象方法(Abstract Method) 一个抽象方法由抽象类声明、由其具体子类实现。具体子类Concrete Class实现抽象类中所定义的抽象方法和钩子方法它们是一个顶级逻辑的组成步骤。 二、为什么要使用模板方法模式 优点 代码复用模板方法将公共的代码放在父类中子类可以通过继承来复用这部分代码从而避免在子类中重复编写相同的代码。算法统一模板方法确保了算法的整体结构在子类中是一致的只是某些步骤的实现有所不同。这有助于保持算法的统一性和完整性。灵活性模板方法允许子类通过实现抽象方法来定制算法的特定步骤从而提供了很大的灵活性。扩展性如果需要增加新的算法步骤只需要在父类的模板方法中添加新的抽象方法并让子类实现这些方法即可无需修改现有的子类代码。 缺点 增加继承层次使用模板方法设计模式会增加类的继承层次这可能会导致系统变得复杂并增加维护成本。子类数量过多如果算法中有很多可变步骤那么可能需要定义很多抽象方法从而导致子类数量过多。这会增加系统的复杂性并可能导致“爆炸式”的子类增长。违反单一职责原则有时模板方法可能会包含过多的逻辑导致父类承担了过多的职责。这违反了单一职责原则使得父类变得难以维护和扩展。 因此在使用模板方法设计模式时需要权衡其优缺点根据具体场景和需求来决定是否使用以及如何使用该模式。 三、案例 普通案例 炒菜步骤打开油烟机-生火-炒菜-关火-关闭油烟机我们就以这个步骤为例不管炒什么菜都会经过 打开油烟机、生火、关火、关闭油烟机这四个步骤因此我们可以将这几个过程定义为一个模板方法至于炒什么样的菜让子类去决定。 public abstract class Cook {public void open(){System.out.println(打开抽油烟机);}public void openFire(){System.out.println(生火);}//设置为抽象方法由每个对象重写这个方法决定做什么菜public abstract void doCook();public void closeFire(){System.out.println(关火);}public void close(){System.out.println(关闭抽油烟机);}//做饭模板方法public final void cook(){this.open();this.openFire();this.doCook();this.closeFire();this.close();} } 子类去继承Cook类实现里面的抽象方法去决定做什么菜。 public class CookPotato extends Cook{Overridepublic void doCook() {System.out.println(酸辣土豆丝);} }public class CookTomato extends Cook{Overridepublic void doCook() {System.out.println(西红柿炒鸡蛋);} }Testvoid test1(){Cook cookPotato new CookPotato();cookPotato.cook();System.out.println();Cook cookTomato new CookTomato();cookTomato.cook();}/* 打开抽油烟机 生火 酸辣土豆丝 关火 关闭抽油烟机打开抽油烟机 生火 西红柿炒鸡蛋 关火 关闭抽油烟机 */ 模拟Servlet过程案例 我们平常使用的Servlet就是一个典型的模板方法的设计模式。 我们平常使用一般是继承HttpServlet这个类然后去重写类面的一些方法如doGet、doPost、doPut等等 public class testServlet extends MyHttpServlet{Overridepublic void doGet(HttpServletRequest request, HttpServletResponse response) {System.out.println(执行doGet方法);}Overridepublic void doPost(HttpServletRequest request, HttpServletResponse response) {System.out.println(执行doPost方法);} }而HttpServlet会继承GenericServlet这个类HttpServlet会将ServletRequest和ServletResponse强转为HttpServletRequest和HttpServletResponse,并对方法类型进行判断派发。 public abstract class MyHttpServlet extends MyGenericServlet{Overridepublic void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException {HttpServletRequest request (HttpServletRequest) servletRequest;HttpServletResponse response (HttpServletResponse) servletResponse;switch (request.getMethod()){case GET:this.doGet(request,response);break;case POST:this.doPost(request,response);break;}}public abstract void doGet(HttpServletRequest request, HttpServletResponse response);public abstract void doPost(HttpServletRequest request, HttpServletResponse response); } GenericServlet实现Servlet这个接口去实现servlet生命周期方法。 public abstract class MyGenericServlet implements Servlet {Overridepublic void init(ServletConfig servletConfig) throws ServletException {System.out.println(正在初始化);}Overridepublic ServletConfig getServletConfig() {return null;}Overridepublic abstract void service(ServletRequest servletRequest, ServletResponse servletResponse) throws ServletException, IOException ;Overridepublic String getServletInfo() {return null;}Overridepublic void destroy() {System.out.println(正在销毁);} } 整个大致过程可以总结为:GenericServlet过滤生命周期方法将service()方法交给HttpServlet去实现HttpServlet负责将实现具体的方法最后就得到了我们常见的doGet等方法我说的这个过程比较简单其实Servlet整个过程还是挺复杂的我就抛砖引玉给大家熟悉下模板方法这个设计模式。 总结 不管哪一种方法模式都各有利弊我们平常在开发的过程中一定要选择最优的解决方式不可盲目使用。今天的分享就到这里我们下期再见。✋
http://www.w-s-a.com/news/493839/

相关文章:

  • 作品集怎么做网站个人简历模板免费下
  • 工业网站素材重庆关键词自动排名
  • 拖拽式网站建设费用微网站怎么做的好名字
  • 长沙电信网站备案谷歌推广怎么做最有效
  • 网站建设与管理总结报告华为开发者联盟
  • 门诊部网站建设天空建筑网站
  • 扬州市城乡建设网站高端品牌鞋子有哪些牌子
  • 杭州网站建设招聘网长沙网络销售公司
  • 网站制作一年多少钱免费做电子章网站
  • 信誉好的营销网站建设徐州市铜山新区建设局网站
  • 建行网站关于我们山西seo和网络推广
  • 1m带宽做网站怎么样深圳网站建设制作开发公司
  • 网站建设 服务内容 费用郴州网站建设公司哪里有
  • 网站关键词重要性育才网站建设
  • 网络安全形势下怎么建设学校网站wordpress最新主题下载
  • 自己建设网站需要什么条件.gs域名做网站怎么样
  • 网上做公益的网站推广手机卡返佣平台
  • 网站是公司域名是个人可以南京建设银行官方网站
  • 做互联网网站的会抓百度网盟推广 网站
  • 商务网站开发设计结论微信报名小程序怎么制作
  • 网站建设销售简历wordpress七比2
  • 制作网站报价工程项目查询哪个网站
  • 深圳移动网站建设制作公司网站建设的认识
  • 网站建设脚本语言有哪些想开网店哪个平台好
  • 视频网站用什么做的好深圳的小程序开发公司
  • 南京网站定制开发商城网站免费模板
  • 青海学会网站建设公司照片组合拼图
  • 中国建设银行福清分行网站爱站网权重查询
  • 外贸通网站建设网站建设7个主要流程图
  • 元气森林网络营销方式医疗网站优化怎么做