首页 > 编程语言 >模板方法模式:如何实现同一模板框架下的算法扩展?

模板方法模式:如何实现同一模板框架下的算法扩展?

时间:2024-08-31 15:50:54浏览次数:6  
标签:框架 步骤 void 算法 key 子类 模板

模板方法模式的原理和代码实现都比较简单,在软件开发中也被广泛应用,但是因为使用继承机制,副作用往往盖过了主要作用,所以在使用时尤其要小心谨慎。

一、模式原理分析

模板方法模式原始定义是:在操作中定义算法的框架,将一些步骤推迟到子类中。模板方法让子类在不改变算法结构的情况下重新定义算法的某些步骤。

从这个定义中,我们能看出模板方法模式的定位很清楚,就是为了解决算法框架这类特定的问题,同时明确表示需要使用继承的结构

模板方法模式包含关键的两个角色:

  • 抽象父类:定义一个算法所包含的所有步骤,并提供一些通用的方法逻辑。

  • 具体子类:继承自抽象父类,根据需要重写父类提供的算法步骤中的某些步骤。

模板方法模式的代码实现:

public abstract class AbstractClassTemplate {
   
    void step1(String key){
   
        //dosomthing
        System.out.println("=== 在模板类里 执行步骤 1");
        if (step2(key)) {
   
            step3();
        } else {
   
            step4();
        }
        step5();
    }
    boolean step2(String key){
   
        System.out.println("=== 在模板类里 执行步骤 2");
        if ("x".equals(key)) {
   
            return true;
        }
        return false;
    }
    abstract void step3();
    abstract void step4();
    void step5() {
   
        System.out.println("=== 在模板类里 执行步骤 5");
    }
    void run(String key){
   
        step1(key);
    }
}
public class ConcreteClassA extends AbstractClassTemplate {
   
    @Override
    void step3() {
   
        System.out.println("===在子类 A 中 执行:步骤3");
    }
    @Override
    void step4<

标签:框架,步骤,void,算法,key,子类,模板
From: https://blog.csdn.net/u010223407/article/details/141729118

相关文章

  • 算法专项-基础100题
    题目1:求和a,b=map(int,input().split())print(a+b)题目2:偶数奇数打印list=[]foriinrange(1,100):ifi%2==0:#if%2!=表示奇数list.append(i)foriinlist:#list转换为strprint(i,end='')题目3:偶数奇数求和sum=0foriinrange(1,100):ifi......
  • [开题报告]flask框架的殡仪馆信息管理系统设计与实现(python+程序+论文)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会的进步和人口老龄化的加剧,殡葬服务行业面临着前所未有的挑战与机遇。传统的手工记录与管理方式已难以满足现代殡仪馆高效、规范、......
  • [开题报告]flask框架的毕业生求职系统的设计与实现k2r16(程序+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着高等教育的普及和就业市场的日益竞争,毕业生在求职过程中面临着信息获取不对称、求职渠道有限、面试流程繁琐等挑战。传统的求职方式往......
  • 分水岭算法简介
    分水岭算法是一种经典的图像分割技术,广泛应用于图像处理领域。它的名称源自地理学中的“分水岭”概念,即在地形中,水从高处流向低处,最终汇聚成河流的过程。在图像分割中,分水岭算法将灰度图像视为地形,将像素值看作海拔高度。该算法模拟水从各个局部最小值(即山谷)向外扩展,最终在山峰......
  • [开题报告]flask框架宠物领养系统(程序+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景随着社会的进步和人们生活水平的提高,宠物已逐渐成为现代家庭的重要成员,为人们的生活带来了无尽的欢乐与陪伴。然而,宠物数量的快速增长也带......
  • [开题报告]flask框架春荣公司人事管理系统设计与实现(程序+论文+python)
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容研究背景在当今快速发展的商业环境中,人力资源管理已成为企业核心竞争力的重要组成部分。随着企业规模的扩大和员工数量的增加,传统的人事管理方式已......
  • 040.CI4框架CodeIgniter,使用Response实现前后端分离并返回JSON
    01、BaseController.php代码如下:<?phpnamespaceApp\Controllers;useCodeIgniter\Controller;useCodeIgniter\HTTP\CLIRequest;useCodeIgniter\API\ResponseTrait;useCodeIgniter\HTTP\IncomingRequest;useCodeIgniter\HTTP\RequestInterface;useCo......
  • 15.标准库算法
    15.标准库算法15.1引言无事可记15.2最低迭代器要求(MinimumIteratorRequirements)容器的一个重要的部分就是它所支持的迭代器类型。这决定了容器可以使用哪种算法。例如,vector和array都支持random-accessiterators。所有的标准库算法都可以用于vector,不改变容器大小的算......
  • 039.CI4框架CodeIgniter,封装Model模型绑定数据库的封装
    01、ModelBase.php代码如下:<?phpnamespaceApp\Models;useCodeIgniter\Database\ConnectionInterface;useCodeIgniter\Model;useCodeIgniter\Validation\ValidationInterface;classModelBaseextendsModel{var$Db;function__construct(Conn......
  • 求阴影面积【简便算法】
    如图所示,长方形ABCD的面积为20平方厘米,S△ABE=4平方厘米,S△AFD=6平方厘米,三角形AEF的面积是多少平方厘米 (?)A 7.2B 7.6    【正确答案】C 8.4D 8.8首先拿到这道题以后,先大致的看一遍,发现这个题目的描述很简短,几何图形也很简单,所以一定是有简便算法的,不需要设什么变量,考试......