栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

23中设计模式--模板方法模式---Template Method Pattern

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

23中设计模式--模板方法模式---Template Method Pattern

参考:https://blog.csdn.net/weixin_48052161/article/details/119655854

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

  • 这里的算法的结构,可以理解为你根据需求设计出来的业务流程。特定的步骤就是指那些可能在 内容上存在变数的环节。

日常生活中的模板方法:
造房时,地基、走线、水管都一样,只有在建筑后期装修上才有差异
西游记里面菩萨定好的 81 难,这就是一个顶层的逻辑骨架。
对于汽车,车从发动到停车的顺序是相同的,不同的是引擎声、鸣笛声等
spring 中对 MYbatis的支持,将一些已经定好的方法封装起来,比如开启事务、获取 Session、关闭 Session 等,程序员不重复写那些已经规范好的代码,直接丢一个实体就可以保存。

代码演示:
计算加减乘除,把这四项基本运算,抽象成一个模板方法.

模板抽象类:AbstractCalculater

package com.example.dtest.design23.templateMode;

public abstract class AbstractCalculater {

    abstract public int calculate(int num1,int num2);

    
    public final int calculate(String exp,String opt){
        int array[] = split(exp,opt);
        return calculate(array[0],array[1]);
    }

//    提取参数
    public int[] split(String exp,String opt){
        String array[] = exp.split(opt);
        int arrayInt[] = new int[2];
        arrayInt[0] = Integer.parseInt(array[0].trim());//trim():除去字符串中空白字符
        arrayInt[1] = Integer.parseInt(array[1].trim());
        return arrayInt;
    }

}

实现膜版的加法算法类:Plus

package com.example.dtest.design23.templateMode;

public class Plus extends AbstractCalculater{
    @Override
    public int calculate(int num1, int num2) {
        return num1 + num2;
    }
}

测试类:

package com.example.dtest.design23.templateMode;

public class TemplateModeTest {

    public static void main(String[] args) {

        String exp = "8 + 8";
        AbstractCalculater calculater = new Plus();
        int result = calculater.calculate(exp, "\+");
        System.out.println("8 + 8="+result);

    }

}

模板方法:抽象类的继承和实现天生用于模板方法的,可以说它就是为模板模式而生,细品!!!!

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/424382.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号