设计模式11 - 设计模式 - 模板设计模式(高频-行为型)

一、定义

  模板模式定义:定义一个算法骨架,并将某些步骤推迟到子类中实现。模板模式可以让子类在不改变算法整体结构的情况下,重新定义算法中的某些步骤。使用模板方法模式可以将代码的公共行为提取,以达到复用的目的。而对于特殊化的行为在子类中实现。父类的模板方法可以控制子类中的具体实现。子类无需了解整体算法框架,只需实现自己的业务逻辑即可。

二、实现方式

模板方法模式中的三类角色

1、具体方法(Concrete Method)

2、抽象方法(Abstract Method)

3、钩子方法(Hook Method)

       首先父类会定义一个算法的框架,即实现算法所必须的所有方法。其中,具有共性的代码放在父类的具体方法中。各个子类特殊性的代码放在子类的具体方法中。但是父类中需要有对应抽象方法声明。钩子方法可以让子类决定是否对算法的不同点进行挂钩(实现)。

模板类:

复制代码
 1 /**
 2  * 模板类
 3  */
 4 public abstract  class AbstractTemplete {
 5     public void templeteMethod(){
 6         System.out.println("通用步骤1");
 7         //抽象方法 - 子类方法1
 8         indivMethod1();
 9         //钩子方法,子类决定是否需要执行方法2
10         if (hook()){
11             indivMethod2(); // 抽象方法 - 子类方法2
12         }
13         //通用步骤3
14         System.out.println("通用步骤3");
15     }
16 
17 
18     // 个性化操作,在子类中具体实现
19     public abstract void indivMethod1();
20 
21     // 个性化操作,在子类中具体实现
22     public abstract void indivMethod2();
23 
24     //钩子方法,决定子类需不需要执行
25     public abstract  boolean hook();
26     
27 }
复制代码

子类1:

复制代码
public class Indiv01 extends AbstractTemplete{
    @Override
    public void indivMethod1() {
        System.out.println("子类1 - 个性化操作1");
    }

    @Override
    public void indivMethod2() {
        System.out.println("子类1 - 个性化操作2");
    }

    @Override
    public boolean hook() {
        return false;
    }
}
复制代码

 

子类2:

复制代码
public class Indiv02 extends AbstractTemplete{
    @Override
    public void indivMethod1() {
        System.out.println("子类2 - 个性化操作1");
    }

    @Override
    public void indivMethod2() {
        System.out.println("子类2 - 个性化操作2");
    }
  /**
   * 钩子方法
   **/
@Override
public boolean hook() { return true; } }
复制代码

 

执行类:

复制代码
    public static void main(String[] args) {
        Indiv01 indiv01 = new Indiv01();
        Indiv02 indiv02 = new Indiv02();
        indiv01.templeteMethod();
        System.out.println("-------------------");
        indiv02.templeteMethod();
    }
结果:

通用步骤1
子类1 - 个性化操作1
通用步骤3
-------------------
通用步骤1
子类2 - 个性化操作1
子类2 - 个性化操作2
通用步骤3

 
复制代码

 

三、使用场景(待补充)

posted @   云执  阅读(44)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示