位置: IT常识 - 正文

设计模式---模板方法模式(设计模式模板方法和策略模式对比)

编辑:rootadmin
简述 提取算法中不变的部分封装成方法,变化的部分延迟到子类。 延迟到子类 这个说法在学习设计模式的时候经常出现,实际就是利用多态在子类中重写方法,使得实行时根据实例的类型调用不同的方法。 话不多说,看个案例。 优化案例 最初版v0 连接数据库我们有很多种方式,JDBC、JNDI、ODBC等等。下面是 ... 简述

推荐整理分享设计模式---模板方法模式(设计模式模板方法和策略模式对比),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:设计模式模板方法和策略模式对比,设计模式24种,设计模式模板模式,设计模式怎么写,设计模式怎么写,设计模式模板,设计模式模板,设计模式模板模式,内容如对您有帮助,希望把文章链接给更多的朋友!

提取算法中不变的部分封装成方法,变化的部分延迟到子类。

设计模式---模板方法模式(设计模式模板方法和策略模式对比)

延迟到子类这个说法在学习设计模式的时候经常出现,实际就是利用多态在子类中重写方法,使得实行时根据实例的类型调用不同的方法。

话不多说,看个案例。

优化案例最初版v0

连接数据库我们有很多种方式,JDBC、JNDI、ODBC等等。下面是不使用设计模式模拟使用三种方式实现连接数据库。

public class Client { public static void main(String[] args) { JDBC jdbc = new JDBC(); jdbc.execute(); // 使用jdbc连接数据库 JNDI jndi = new JNDI(); jndi.execute(); // 使用jndi连接数据库 ODBC odbc = new ODBC(); odbc.execute(); // 使用odbc连接数据库 }}public class JDBC { public void execute() { System.out.println("读取数据库链接配置文件"); System.out.println("使用JDBC建立数据库链接。。。"); System.out.println("数据库链接成功"); }}public class ODBC { public void execute() { System.out.println("读取数据库链接配置文件"); System.out.println("使用ODBC建立数据库链接。。。"); System.out.println("数据库链接成功"); }}public class JNDI { public void execute() { System.out.println("读取数据库链接配置文件"); System.out.println("使用JNDI建立数据库链接。。。"); System.out.println("数据库链接成功"); }}

可以看出以上代码中有两处不变的代码 --> System.out.println("读取数据库链接配置文件")、System.out.println("数据库链接成功")。这两处代码分别在三个类中重复了三次。案例中只有两行代码,问题不大,但是真实项目中可能会存在几百行代码完全相同但是到处都有的情况。为了解决这个问题,提高我们开发的效率,并且也能提高bug筛查的效率,我们可以使用模板方法模式。详细请看以下案例。

能提高bug筛查的效率的原因如果几百行的代码重复出现在十几个或者几十个不同的类中,当bug出现在一处代码时,为了确保系统不再出现同样的错误,需要把剩余所有相同的代码都检查一遍,这无疑增加了后期维护的成本。而使用模板方法模式则可以省去很多花在这类杂活上的时间。

修改版v1public class Client { public static void main(String[] args) { JDBC jdbc = new JDBC(); jdbc.templateExecute(); // 使用jdbc连接数据库 JNDI jndi = new JNDI(); jndi.templateExecute(); // 使用jndi连接数据库 ODBC odbc = new ODBC(); odbc.templateExecute(); // 使用odbc连接数据库 }}public abstract class DBConnection { // 模板方法 public void templateExecute() { System.out.println("读取数据库链接配置文件"); // 不变的代码1 this.execute(); System.out.println("数据库链接成功"); // 不变的代码2 } public abstract void execute();}public class JDBC extends DBConnection { public void execute() { System.out.println("使用JDBC建立数据库链接。。。"); }}public class ODBC extends DBConnection { public void execute() { System.out.println("使用ODBC建立数据库链接。。。"); }}public class JNDI extends DBConnection { public void execute() { System.out.println("使用JNDI建立数据库链接。。。"); }}

就增加一个抽象类和一个模板方法就解决了代码重复的问题。现在重复的代码就两行,所以效果不明显,如果是几百行,那效果立竿见影,而且模板方法模式也没有什么复杂的理念,简单易懂。悄悄告诉你,模板方法模式在各种框架中都是非常常见的。

总结优点可以减少项目中大量重复代码。设计思想简单(就继承+多态),易懂。实现简单,只需要增加一个抽象类,增加一个模板方法即可。缺点说实话,个人觉得没啥缺点。要是一个模板方法模式也能增加代码的阅读难度的话,还是转行比较好哈哈哈。适用场景任何可以明确分清变化与不变化的代码。
本文链接地址:https://www.jiuchutong.com/zhishi/313322.html 转载请保留说明!

上一篇:Python元类的使用(python元数据)

下一篇:织梦dedecms用火车头采集分页教程(将织梦dedecms转换到wordpress)

  • 苹果13外壳材质(苹果13外壳材质容易碎吗)

    苹果13外壳材质(苹果13外壳材质容易碎吗)

  • wps备份在哪个文件夹(wps备份在哪个文件夹里面)

    wps备份在哪个文件夹(wps备份在哪个文件夹里面)

  • 快手怎么设置青少年模式(快手怎么设置青少年模式?)

    快手怎么设置青少年模式(快手怎么设置青少年模式?)

  • pr导出的时候encoder未安装(pr导出字幕不见了)

    pr导出的时候encoder未安装(pr导出字幕不见了)

  • 手机打电话显示未接通(手机打电话显示无法访问移动网络)

    手机打电话显示未接通(手机打电话显示无法访问移动网络)

  • 百家号内容质量分和什么有关(百家号内容质量不足一天只能发1天文章)

    百家号内容质量分和什么有关(百家号内容质量不足一天只能发1天文章)

  • 抖音视频投稿功能封禁怎么办(抖音视频投稿功能已封禁怎么解除)

    抖音视频投稿功能封禁怎么办(抖音视频投稿功能已封禁怎么解除)

  • 连接蓝牙要网络吗(连接蓝牙要网络才能连吗)

    连接蓝牙要网络吗(连接蓝牙要网络才能连吗)

  • 文件资源管理器未响应(文件资源管理器删除了怎么办)

    文件资源管理器未响应(文件资源管理器删除了怎么办)

  • qq硬盘在哪里(qq硬盘的东西哪儿去了)

    qq硬盘在哪里(qq硬盘的东西哪儿去了)

  • ipad air3多少寸(ipad air3多少英寸)

    ipad air3多少寸(ipad air3多少英寸)

  • word表格格式清除(word表格格式清楚)

    word表格格式清除(word表格格式清楚)

  • 压缩包是什么可以删吗(压缩包是啥)

    压缩包是什么可以删吗(压缩包是啥)

  • 微型计算机中内存指(微型计算机中内存储器比外存储器)

    微型计算机中内存指(微型计算机中内存储器比外存储器)

  • 手机网购怎么操作(手机网购怎么操作流程)

    手机网购怎么操作(手机网购怎么操作流程)

  • 淘宝直播入口怎么没了(淘宝直播入口怎么进不去)

    淘宝直播入口怎么没了(淘宝直播入口怎么进不去)

  • 戴尔笔记本怎么恢复出厂设置(戴尔笔记本怎么连接wifi)

    戴尔笔记本怎么恢复出厂设置(戴尔笔记本怎么连接wifi)

  • 苹果x指纹在哪设置(苹果X指纹在哪)

    苹果x指纹在哪设置(苹果X指纹在哪)

  • 怎样删除微信好友(怎样删除微信好友并从他列表中删除)

    怎样删除微信好友(怎样删除微信好友并从他列表中删除)

  • 如何解决ppt不能播放视频(ppt不能正常打开,如何应对)

    如何解决ppt不能播放视频(ppt不能正常打开,如何应对)

  • 一加7pro用什么耳机(一加7pro用什么充电器)

    一加7pro用什么耳机(一加7pro用什么充电器)

  • 如何设计ppt版式(怎样设计幻灯片的版式)

    如何设计ppt版式(怎样设计幻灯片的版式)

  • 锤子便签怎么涂鸦(锤子便签用法)

    锤子便签怎么涂鸦(锤子便签用法)

  • 钉钉如何虚拟位置打卡(钉钉如何虚拟位置打卡视频教程)

    钉钉如何虚拟位置打卡(钉钉如何虚拟位置打卡视频教程)

  • iphonexr港版有实体双卡吗(xr有港版吗)

    iphonexr港版有实体双卡吗(xr有港版吗)

  • 华为p30home键在哪里设置(p30home键怎么设置)

    华为p30home键在哪里设置(p30home键怎么设置)

  • 8p双摄像头怎么打开(8p两个摄像头)

    8p双摄像头怎么打开(8p两个摄像头)

  • 如何调整任务栏预览窗口大小(如何调整任务栏图标大小)

    如何调整任务栏预览窗口大小(如何调整任务栏图标大小)

  • 电脑如何关闭屏幕保护功能?(电脑如何关闭屏幕还在工作)

    电脑如何关闭屏幕保护功能?(电脑如何关闭屏幕还在工作)

  • 残疾人保证金计算器
  • 什么负债计税基础为零
  • 年底计提是什么意思
  • 小微企业增值税减免政策
  • 融资租赁的销项税额抵减
  • 没有收汇可以申报吗
  • 银行多扣钱可以多倍赔偿吗
  • 固定资产报废后怎么处理
  • 合同印花税进哪个科目
  • 企业个人所得税逾期未申报怎么办
  • 环评公司的成本核算
  • 无偿接收股权
  • 无法支付的其他账户
  • 以前年度多做了收入怎样调账
  • 发票修复是怎么回事
  • 预付账款收不到发票怎么冲账
  • 货代发票税率是多少
  • 小企业会计准则成本核算方法选什么
  • 退税收入怎么做分录
  • 简易计税分包款进项税可以抵扣吗
  • 公司取得的发明专利
  • mac键盘快捷键设置
  • 增值税专用发票抵扣期限
  • 增值税专用发票查询系统官方网站
  • 年度汇算清缴怎么查询
  • 会计科目怎么调账
  • 坦桑尼亚塞伦盖蒂公园有什么动物
  • 免税货物增值税计算公式
  • 在计算应纳税所得额时,不允许作为税金项目
  • idea如何运行springboot项目
  • php引用文件的方法
  • framework3.5怎么打开
  • mybatis isnotempty标签
  • 织梦最新发表的作品
  • 充电桩折旧年限是多少年
  • 土增税预征计征依据
  • 资产报废的原因及情况说明
  • 总公司所得税汇算
  • 工会经费支出实施细则
  • 分公司可以独立开票吗
  • 国家税务总局公告2011年第25号公告
  • 机器设备可以作为出资方式吗
  • 房地产公司收房款怎么分录
  • 接受母公司捐赠现金分录
  • 商业银行提取的盈余公积可用于
  • 以前年度损益的科目代码
  • 执行迟延履行金的规定
  • 开发成本存货怎么算
  • 无发票材料可以入材料账吗
  • 厂家核销费用直接扣除吗
  • 车辆购置税的会计科目怎么写
  • 结算本月应付职工工资,其中生产工人工资8000元
  • 工业企业生产什么
  • fedora linux安装教程
  • win10重置登录
  • window10桌面有白色框
  • ubuntu搜索已安装软件
  • debian openssh
  • 苹果电脑mac系统键盘无法找到
  • 电脑运行慢怎么办?
  • win10dll丢失
  • reminder.exe - reminder是什么进程 有什么用
  • windows预体验版本遇到问题
  • fpx是什么文件格式
  • win10更新后qq打不开
  • win8怎么看电脑wifi密码
  • win10移动版微信uwp
  • 简述dom的组成
  • Extjs优化(一)删除冗余代码提高运行速度
  • jquery插件使用教程
  • opengl入门教程
  • 一个简单的防偷技巧
  • jquery滚动到底部加载数据
  • js基础教程
  • 方块大作战百科
  • javascript面向对象精要
  • python中for循环写法
  • 企业所得税税率10%
  • 广东国税局发票查询系统
  • 广州市地方税务局规费服务中心
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设