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

  • 微信被好友拉黑怎么恢复(微信被好友拉黑了怎么加回来对方不知道)

    微信被好友拉黑怎么恢复(微信被好友拉黑了怎么加回来对方不知道)

  • 希沃白板课件怎么下载到U盘(希沃白板课件怎么转化成wps)

    希沃白板课件怎么下载到U盘(希沃白板课件怎么转化成wps)

  • 荣耀20Pro老是自动关机怎么回事(荣耀20pro老是自动关机怎么办)

    荣耀20Pro老是自动关机怎么回事(荣耀20pro老是自动关机怎么办)

  • 微信设置朋友权限仅聊天(微信设置朋友权限怎么设置)

    微信设置朋友权限仅聊天(微信设置朋友权限怎么设置)

  • QQ怎么收藏聊天记录(qq上怎么收藏聊天记录)

    QQ怎么收藏聊天记录(qq上怎么收藏聊天记录)

  • 华为mate30pro微信视频聊天怎么开美颜(华为mate30pro微信照相机模糊怎么设置)

    华为mate30pro微信视频聊天怎么开美颜(华为mate30pro微信照相机模糊怎么设置)

  • e5相当于i几处理器(e5的处理器怎么样)

    e5相当于i几处理器(e5的处理器怎么样)

  • 为什么抖音一直频繁更新(为什么抖音一直发验证码过来)

    为什么抖音一直频繁更新(为什么抖音一直发验证码过来)

  • 手机月牙图标怎么消除(手机月牙图标怎么关闭)

    手机月牙图标怎么消除(手机月牙图标怎么关闭)

  • teeservice是什么软件

    teeservice是什么软件

  • 升级iOS13没信号 (ios13.5.1信号不好)

    升级iOS13没信号 (ios13.5.1信号不好)

  • 小米短信允许通知打不开(小米短信允许通知无法开启怎么设置)

    小米短信允许通知打不开(小米短信允许通知无法开启怎么设置)

  • k20Pro屏幕材质(k20pro屏幕是lcd屏幕吗)

    k20Pro屏幕材质(k20pro屏幕是lcd屏幕吗)

  • 程序的基本结构(程序的基本结构包括)

    程序的基本结构(程序的基本结构包括)

  • 视频发不出去怎么回事(视频发不出去怎么整)

    视频发不出去怎么回事(视频发不出去怎么整)

  • 幻灯片背景填充预设颜色怎么设置(幻灯片背景填充预设颜色为麦浪滚滚)

    幻灯片背景填充预设颜色怎么设置(幻灯片背景填充预设颜色为麦浪滚滚)

  • 红米k30是多少瓦快充(红米k6012+256多少钱)

    红米k30是多少瓦快充(红米k6012+256多少钱)

  • 1000gb等于多少g(1000gb等于多少mb)

    1000gb等于多少g(1000gb等于多少mb)

  • vivo手机怎么调字体大小(vivo手机怎么调出下面的三个按键)

    vivo手机怎么调字体大小(vivo手机怎么调出下面的三个按键)

  • 免费安全共享wifi是啥(免费安全共享无线网)

    免费安全共享wifi是啥(免费安全共享无线网)

  • 苹果手机怎么下载网页视频(苹果手机怎么下载app并安装)

    苹果手机怎么下载网页视频(苹果手机怎么下载app并安装)

  • 手机obb文件在哪(手机上的obb文件)

    手机obb文件在哪(手机上的obb文件)

  • 电脑上的页面布局在哪里(电脑上的页面布局怎么调)

    电脑上的页面布局在哪里(电脑上的页面布局怎么调)

  • 手机改wifi密码的步骤(苹果手机改wifi密码)

    手机改wifi密码的步骤(苹果手机改wifi密码)

  • stm32与51单片机区别(stm32与51单片机的优缺点)

    stm32与51单片机区别(stm32与51单片机的优缺点)

  • win10帮助与支持在哪里?(window10的帮助与支持窗口在哪)

    win10帮助与支持在哪里?(window10的帮助与支持窗口在哪)

  • 股权置换税收
  • 所得税季报季末人数怎么计算
  • 报税金额和实际做账金额不一样
  • 客户到期不付款如何处理
  • 开发票第一行
  • 固定资产可以不设置残值吗
  • 运输服务增值税纳税义务发生时间
  • 税局代开专票如何做账务处理?
  • 送员工礼物
  • 年报所得税与季报的区别
  • 年度所得税汇算清缴报告在哪打印
  • 房地产公司要做数据分析吗
  • 一般企业每个月的保洁费用是多少
  • 会务费发票要附上照片吗
  • 人工费收税吗
  • 商砼税率是多少?
  • 应收账款的贷方反映
  • 公司为员工负担个税怎么做账
  • 注销怎么做账
  • 小微企业如何备案
  • 转让旧固定资产怎么做账
  • 发票金额大于实际支付金额如何报账
  • 修理厂年收入
  • 现金股利属于什么所得
  • 电脑自动更新系统怎么关闭
  • macos big sur怎么升级
  • 金钱树的养殖方法和浇水方式
  • 公司已经控股一年怎么办
  • 未分配利润转增股本交印花税
  • 税前扣除是好事吗
  • sesvc.exe是什么进程
  • 如何检查路由器防火墙设置
  • 新准则有哪些
  • codeignitor
  • php框架运行原理
  • 个体工商户使用个人二维码收款违法吗
  • 基于Java+SpringBoot+Vue前后端分离仓库管理系统设计实现
  • php制作验证码
  • 利用python
  • 小规模纳税人应交税费会计分录
  • 帝国cms怎么调用文章随机段落
  • 暂未取得发票的费用怎么入账
  • 固定资产融资租赁是什么意思
  • 用vue做的企业项目
  • 银行业的利润率
  • 企业其他应收款包括哪些
  • 用jdom创建中文的xml文件的方法
  • 个人所得税的税率表最新的
  • Mysql以utf8存储gbk输出的实现方法提供
  • 增值税留抵扣额
  • 生产成本科目期末怎么结转
  • 弃置费用预计负债的会计处理
  • 年度所得税费用
  • 主营业务成本带二级科目吗
  • 固定资产清理的税率是多少
  • 营改增 交通运输
  • 结汇时和月底结转汇兑损益
  • 将外购商品用于赠送客户
  • 支付宝里的收入和支出明细能查多久的?
  • 电脑太慢了怎么解决
  • 手工设置源泉设计
  • centos7搜索
  • 微软报错是什么意思
  • win10里的运行
  • win7电脑曝光度过高怎么调
  • python 自定义sort
  • easyui 日期格式化
  • Bullet(Cocos2dx)之凸多面体形状和组合形状
  • 安卓下的分件分享怎么弄
  • 如何获取医院电子发票
  • nodejs 写文件
  • 安卓解析工具
  • 安卓编程视频教程
  • unity全景
  • 欢迎使用来电提醒业务是什么意思
  • Android调用系统的电话拨号程序
  • python web框架2023
  • 湖南国家电子税务局手机版
  • 深圳国税局官网登录
  • 纳税人总机构和分机构不在同一县怎么办
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设