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

苏州吴江网站建设新生活cms系统下载

苏州吴江网站建设,新生活cms系统下载,wordpress 模版 推荐,模板做网站上传一、什么是模板方法模式 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。 模板方法模式包含以…

一、什么是模板方法模式

  模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。

  模板方法模式包含以下主要角色。

① 抽象类/抽象模板(Abstract Class),负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。这些方法的定义如下。

  • 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。
  • 基本方法:是整个算法中的一个步骤。

② 具体子类/具体实现(Concrete Class),实现抽象类中所定义的抽象方法和钩子方法,它们是一个顶级逻辑的一个组成步骤。

二、模板方法模式的实现

  • 抽象类(Abstract Class)
/*** @author FluffyCatkin* @version 1.0* @date 2020/1/6 0006 17:23* @description 抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。* 这些方法的定义如下。*      ① 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。**      ② 基本方法:是整个算法中的一个步骤,包含以下几种类型。*          抽象方法:在抽象类中申明,由具体子类实现。*          具体方法:在抽象类中已经实现,在具体子类中可以继承或重写它。*          钩子方法:在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。*/
public abstract class AbstractClass {public void method(){action1();action2();if (action3()){action4();}action5();}protected abstract void action5();private void action4(){System.out.println("action4................");};protected abstract boolean action3();protected abstract void action2();private  void action1(){System.out.println("action1................");};}
  • 具体子类(Concrete Class)
/*** @author FluffyCatkin* @version 1.0* @date 2020/1/6 0006 17:28* @description 具体子类(Concrete Class):实现抽象类中所定义的抽象方法和钩子方法,它们是一个顶级逻辑的一个组成步骤。*/
public class ConcreteClass extends AbstractClass {@Overrideprotected void action5() {System.out.println("extends....action5.............");}@Overrideprotected boolean action3() {return false;}@Overrideprotected void action2() {System.out.println("extends....action2.............");}
}
  • 测试类
/*** @author FluffyCatkin* @version 1.0* @date 2020/1/6 0006 17:21* @description 模版方法模式** 在面向对象程序设计过程中,程序员常常会遇到这种情况:设计一个系统时知道了算法所需的关键步骤,而且确定了这些步骤的执行顺序,但某些步骤的具体实现还未知,或者说某些步骤的实现与具体的环境相关。** 例如,去银行办理业务一般要经过以下4个流程:取号、排队、办理具体业务、对银行工作人员进行评分等,其中取号、排队和对银行工作人员进行评分的业务对每个客户是一样的,可以在父类中实现,但是办理具体业务却因人而异,它可能是存款、取款或者转账等,可以延迟到子类中实现。** 这样的例子在生活中还有很多,例如,一个人每天会起床、吃饭、做事、睡觉等,其中“做事”的内容每天可能不同。我们把这些规定了流程或格式的实例定义成模板,允许使用者根据自己的需求去更新它,例如,简历模板、论文模板、Word 中模板文件等。** 以下介绍的模板方法模式将解决以上类似的问题。* 模式的定义与特点:* 模板方法(Template Method)模式的定义如下:定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以不改变该算法结构的情况下重定义该算法的某些特定步骤。它是一种类行为型模式。** 该模式的主要优点如下:* 它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。* 它在父类中提取了公共的部分代码,便于代码复用。* 部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。** 该模式的主要缺点如下:* 对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象。* 父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。* 模式的结构与实现:* 模板方法模式需要注意抽象类与具体子类之间的协作。它用到了虚函数的多态性技术以及“不用调用我,让我来调用你”的反向控制技术。现在来介绍它们的基本结构。* 模式的结构:* 模板方法模式包含以下主要角色。* (1) 抽象类(Abstract Class):负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。这些方法的定义如下。* ① 模板方法:定义了算法的骨架,按某种顺序调用其包含的基本方法。* ② 基本方法:是整个算法中的一个步骤,包含以下几种类型。抽象方法:在抽象类中申明,由具体子类实现。* 具体方法:在抽象类中已经实现,在具体子类中可以继承或重写它。* 钩子方法:在抽象类中已经实现,包括用于判断的逻辑方法和需要子类重写的空方法两种。* (2) 具体子类(Concrete Class):实现抽象类中所定义的抽象方法和钩子方法,它们是一个顶级逻辑的一个组成步骤**/
public class Main {@Testpublic void templateMethodMode(){AbstractClass concreteClass = new ConcreteClass();concreteClass.method();}
}

运行结果:

action1................
extends....action2.............
extends....action5.............Process finished with exit code 0

三、应用场景

  模板方法模式通常适用于以下场景:

  • 算法的整体步骤很固定,但其中个别部分易变时,这时候可以使用模板方法模式,将容易变的部分抽象出来,供子类实现。
  • 当多个子类存在公共的行为时,可以将其提取出来并集中到一个公共父类中以避免代码重复。首先,要识别现有代码中的不同之处,并且将不同之处分离为新的操作。最后,用一个调用这些新的操作的模板方法来替换这些不同的代码。
  • 当需要控制子类的扩展时,模板方法只在特定点调用钩子操作,这样就只允许在这些点进行扩展。

四、优缺点分析

  模板方法模式的主要优点如下:

  • 它封装了不变部分,扩展可变部分。它把认为是不变部分的算法封装到父类中实现,而把可变部分算法由子类继承实现,便于子类继续扩展。
  • 它在父类中提取了公共的部分代码,便于代码复用。
  • 部分方法是由子类实现的,因此子类可以通过扩展方式增加相应的功能,符合开闭原则。

  模板方法模式的主要缺点如下:

  • 对每个不同的实现都需要定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象,间接地增加了系统实现的复杂度。
  • 父类中的抽象方法由子类实现,子类执行的结果会影响父类的结果,这导致一种反向的控制结构,它提高了代码阅读的难度。
  • 由于继承关系自身的缺点,如果父类添加新的抽象方法,则所有子类都要改一遍。

代码地址:https://gitee.com/fluffycatkin/JavaDesignModel.git

    image.png

原文出处:http://c.biancheng.net/view/1376.html

http://www.yayakq.cn/news/398557/

相关文章:

  • 网站的优点有哪些方面电商出口营销要多少钱
  • 门户网站开发视频教学Wordpress 分表分库
  • 几个做ppt的网站知乎微生成网站
  • wordpress建站 百度网盘rest api wordpress
  • 个人网站怎么做游戏wordpress上传视频慢
  • 英国有哪些做折扣的网站wordpress 账号密码忘记
  • 淘宝联盟推广可以做网站吗网站建设期间工作总结
  • 个人网站该怎么打广告平台公司属于什么行业
  • 怎么做的英文网站网销怎么找客户资源
  • 博山区住房和城乡建设局网站网站建设 金手指 排名22
  • 单位网站建设公司淮北做网站电话
  • 某公司网站建设策划阳东区网络问政平台
  • 合肥建设网站查询系统joomla! 1.5 网站建设基础教程
  • 仿网站制作教学视频网上营销网站
  • asp转换手机网站专做废旧电子电路板配件回收的网站
  • 建设部网站公示钦州公租房摇号查询竞价推广托管公司价格
  • 内蒙古建设监理协会网站榆林做网站的公司电话
  • 山东省住房和城乡建设厅门户网站福州最好的网站设计服务公司
  • 产品宣传网站的重点百度提交网站已删内容
  • 黄南网站建设口碑营销相关案例
  • 班级设计网站建设3d网站建设制作
  • 潜江 网站建设如何做网站二级域名
  • 企业网站博客上如何营销站长工具5118
  • 校园网站建设网自己写的字体wordpress
  • 最优惠的建设网站建设代理记账公司哪家好
  • wordpress怎么调导航优化方案丛书官网
  • 春哥 响应式网站建设团购网站及域名
  • 学校网站建设的目的及意义黄骅市简介
  • 性价比最高的网站建设平台及服务是什么
  • 移动网络服务电话杭州seo培训学校