贵阳企业自助建站系统,成都企业网站制作,揭阳制作公司网站,网站设计与推广概述 模板方法模式#xff1a;定义一个操作中算法的框架#xff0c;而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是一种基于继承的代码复用技术#xff0c;它是一种类行为型模式。模板方法模式是结…概述 模板方法模式定义一个操作中算法的框架而将一些步骤延迟到子类中。模板方法模式使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法模式是一种基于继承的代码复用技术它是一种类行为型模式。模板方法模式是结构最简单的行为型设计模式在其结构中只存在父类与子类之间的继承关系。通过使用模板方法模式可以将一些复杂流程的实现步骤封装在一系列基本方法中在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序而通过其子类来覆盖某些步骤从而使得相同的算法框架可以有不同的执行结果。模板方法模式提供了一个模板方法来定义算法框架而某些具体步骤的实现可以在其子类中完成。 模板方法模式结构比较简单其核心是抽象类和其中的模板方法的设计其结构如下图所示 模板方法Template Method模式包含以下主要角色
抽象类Abstract Class负责给出一个算法的轮廓和骨架。它由一个模板方法和若干个基本方法构成。 模板方法定义了算法的骨架按某种顺序调用其包含的基本方法。 基本方法是实现算法各个步骤的方法是模板方法的组成部分。基本方法又可以分为三种
抽象方法(Abstract Method) 一个抽象方法由抽象类声明、由其具体子类实现。具体方法(Concrete Method) 一个具体方法由一个抽象类或具体类声明并实现其子类可以进行覆盖也可以直接继承。钩子方法(Hook Method) 在抽象类中已经实现包括用于判断的逻辑方法和需要子类重写的空方法两种。一般钩子方法是用于判断的逻辑方法这类方法名一般为isXxx返回值类型为boolean类型。 在模板方法模式中由于面向对象的多态性子类对象在运行时将覆盖父类对象子类中定义的方法也将覆盖父类中定义的方法因此程序在运行时具体子类的基本方法将覆盖父类中定义的基本方法子类的钩子方法也将覆盖父类的钩子方法从而可以通过在子类中实现的钩子方法对父类方法的执行进行约束实现子类对父类行为的反向控制。
具体子类Concrete Class实现抽象类中所定义的抽象方法和钩子方法它们是一个顶级逻辑的组成步骤。
简单实现
常规实现 钩子实现 由上图可以看出 HRProcess具体子类覆盖了isAudit()钩子方法使采购流程正常执行而MarketProcess具体子类没有覆盖钩子方法父类模板方法中采购没有没有执行我们可以通过钩子方法实现一种反向控制结构通过子类覆盖父类的钩子方法来决定某一特定步骤是否需要执行。
总结
适用场景 一次性实现一个算法不变的部分并将可变的行为留给子类来实现。 各子类中公共的行为被提取出来并集中到一个公共的父类中从而避免代码重复。 优点 利用模板方法将相同处理逻辑的代码放到抽象父类中可以提高代码的复用性。 将不同的代码不同的子类中通过对子类的扩展增加新的行为提高代码的扩展性。 把不变的行为写在父类上去除子类的重复代码提供了一个很好的代码复用平台符合开闭原则。
缺点 类数目的增加每一个抽象类都需要一个子类来实现这样导致类的个数增加。 类数量的增加间接地增加了系统实现的复杂度。 继承关系自身缺点如果父类添加新的抽象方法所有子类都要改一遍。