位置: 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)

  • 10.5寸ipad长宽(10.5寸ipad大小)

    10.5寸ipad长宽(10.5寸ipad大小)

  • 电费卡怎么插(电费卡插哪里)

    电费卡怎么插(电费卡插哪里)

  • qq附近怎样才算访客(qq附近人技巧)

    qq附近怎样才算访客(qq附近人技巧)

  • 打印处理器不小心删了(打印处理器不存在怎么解决win10)

    打印处理器不小心删了(打印处理器不存在怎么解决win10)

  • 小米手机同步开还是不开(小米手机同步开机密码)

    小米手机同步开还是不开(小米手机同步开机密码)

  • 怎么分享超过5分钟的视频(怎么分享超过5分钟的视频到朋友圈)

    怎么分享超过5分钟的视频(怎么分享超过5分钟的视频到朋友圈)

  • win10装完多少g(win10装完占多大空间)

    win10装完多少g(win10装完占多大空间)

  • 抖音无法拍摄怎么设置(拍抖音无法拍摄是怎么回事)

    抖音无法拍摄怎么设置(拍抖音无法拍摄是怎么回事)

  • 手机可以上网电脑不能上网(手机可以上网电脑连不上网怎么回事)

    手机可以上网电脑不能上网(手机可以上网电脑连不上网怎么回事)

  • windows手机有哪些(有windows的手机吗)

    windows手机有哪些(有windows的手机吗)

  • 手机重启忘记密码怎么办(手机重启忘记密码怎么开机)

    手机重启忘记密码怎么办(手机重启忘记密码怎么开机)

  • oppoa8什么时候上市的(oppoa8是什么时候上市,上市价格)

    oppoa8什么时候上市的(oppoa8是什么时候上市,上市价格)

  • 微信笔记录音多长时间(微信笔记录音时间太短原因)

    微信笔记录音多长时间(微信笔记录音时间太短原因)

  • 淘宝退货填错单号怎么修改(淘宝退货填错单号卖家拒绝退款怎么办)

    淘宝退货填错单号怎么修改(淘宝退货填错单号卖家拒绝退款怎么办)

  • word文字横排改竖排(word文字竖排居中)

    word文字横排改竖排(word文字竖排居中)

  • 苹果x怎么设置无线充电(苹果x怎么设置门禁卡)

    苹果x怎么设置无线充电(苹果x怎么设置门禁卡)

  • 苹果11消息闪光灯怎么开(苹果11消息闪光灯怎么关闭)

    苹果11消息闪光灯怎么开(苹果11消息闪光灯怎么关闭)

  • 店铺微淘在哪里(店家微淘在哪里进入)

    店铺微淘在哪里(店家微淘在哪里进入)

  • 华为mate30pro5g什么时候预售(华为mate30pro5g什么屏幕)

    华为mate30pro5g什么时候预售(华为mate30pro5g什么屏幕)

  • 快手直播间人数在哪看(快手直播间人数最多的是谁)

    快手直播间人数在哪看(快手直播间人数最多的是谁)

  • excel中日期格式1984-07-07怎么输入(Excel中日期格式怎么转换成文本)

    excel中日期格式1984-07-07怎么输入(Excel中日期格式怎么转换成文本)

  • 什么软件可以查驾驶证分数(什么软件可以查公司信息)

    什么软件可以查驾驶证分数(什么软件可以查公司信息)

  • oppo怎么拍夜景(oppo手机拍夜景参数设置)

    oppo怎么拍夜景(oppo手机拍夜景参数设置)

  • 三星s8一键锁屏(三星s8可用的一键锁屏)

    三星s8一键锁屏(三星s8可用的一键锁屏)

  • 重装电脑ghost分区丢失只剩C盘怎么恢复(电脑重装系统如何分区?)

    重装电脑ghost分区丢失只剩C盘怎么恢复(电脑重装系统如何分区?)

  • 购买免税产品的app
  • 税款代码
  • 企业所得税怎么做账
  • 差旅费津贴需要缴纳个人所得税吗?
  • 如何理解合并报表的调整和抵消
  • 利息费用和利息支出的区别计算公式
  • 机票抵扣怎么填申报表
  • 包装版费怎么计入生产成本
  • 农产品加工需要交税吗
  • 企业所有职工都要交税吗
  • 企业所得税弥补亏损年限
  • 当买方违约时,卖方可以得到哪些补救?
  • 挂靠建筑公司企业所得税怎么交?
  • 建帐时库存的原材料如何入帐?
  • 企业收到发要失控发票做进项税额转出如何做税务处理?
  • 商品已发出未开票未收款怎么做账
  • 房屋购买安装电梯可以抵扣吗?
  • 核定征收的公司用做账么
  • 兼营小规模纳税人增值税优惠
  • 自建公司什么意思
  • 税收筹划也要有风险意识
  • 委外加工企业怎么样降本
  • 租赁发票交税交多少
  • 补提的增值税应该记在哪里
  • 基本户注销帐户余额怎么分配?
  • 公司注销登记提交材料规范
  • 行政单位年底结账怎么算
  • mac电脑新手使用
  • 王者荣耀中雅典娜的战争女神多少钱
  • 华为鸿蒙harmonyos官网4.0
  • macos ppt软件
  • mdn php
  • ctfmon.exe文件在哪
  • php句法规则详解图
  • 固定资产加速折旧方法
  • 会计分录内容包括
  • 日本北海道 (© Hiroshi Yokoyama/eStock Photo)
  • php curl命令详解
  • 滴滴打车电子普票可以抵扣进项税额吗
  • 什么是跨域以及跨境电商
  • 项目的分包行为是否合理
  • 图书发票怎么开
  • 公章的法律效力范围
  • 企业购买预付卡怎么做账
  • css基础实验报告
  • stm32cubeIDE开发串口 修改速率
  • mkdir命令怎么用
  • thinkphp和php
  • list删除某个元素 python
  • 销售折扣购物卡怎么做账
  • 投资收益的核算依据
  • 企业应付账款明细表
  • 借款合同 印花
  • 预收账款可以用什么科目核算
  • 季度企业所得税资产总额怎么填
  • 公司两个股东变更为一个股东,需要交税么
  • 电子承兑转出需要授权吗
  • 发票未及时开,但是双方会计已经做帐,怎么办?
  • 其他综合收益相反科目
  • 企业弥补亏损的来源有
  • sql合并数据库
  • mysql连接查询的几种方式
  • mysql 连续日期
  • windows隐藏文件名
  • netdrive mac
  • windows关机蓝屏是怎么回事
  • ghost出现错误
  • ubuntu20.04怎么用
  • android常用命令
  • 最新推荐美剧
  • js的脚本语言
  • 查找第一个字符
  • python 数据结构 算法
  • jqueryw3c
  • python的params
  • js命名函数
  • 江西省税务局12366
  • 没有代理记账资质做代理记账业务
  • 你认为作为一名护士应具备哪些素质
  • 年度关联业务往来报告
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设