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

  • 网站推广的目的是什么?(网站推广的目的和意义)

    网站推广的目的是什么?(网站推广的目的和意义)

  • 安卓双系统怎么设置(安卓双系统怎么删除一个)

    安卓双系统怎么设置(安卓双系统怎么删除一个)

  • qq转发可以屏蔽部分人吗(qq转发怎么不让别人看见)

    qq转发可以屏蔽部分人吗(qq转发怎么不让别人看见)

  • 网络攻击的种类分(网络安全的威胁有哪些)

    网络攻击的种类分(网络安全的威胁有哪些)

  • oppoqq分身怎么弄(oppo手机qq怎么分身)

    oppoqq分身怎么弄(oppo手机qq怎么分身)

  • 快手美颜素材下载不了(快手美颜太厉害了)

    快手美颜素材下载不了(快手美颜太厉害了)

  • 快手小店和有赞有什么区别(快手小店和有赞哪个好)

    快手小店和有赞有什么区别(快手小店和有赞哪个好)

  • oppo手机怎么返回上一页(oppo手机怎么返回主页面)

    oppo手机怎么返回上一页(oppo手机怎么返回主页面)

  • 华为的otg功能在哪里(华为的OTG功能在哪)

    华为的otg功能在哪里(华为的OTG功能在哪)

  • 为什么截屏的图片在相册里找不到(为什么截屏的图片显示不出来)

    为什么截屏的图片在相册里找不到(为什么截屏的图片显示不出来)

  • 发生异常,无法分享怎么办(发生异常,无法分享什么意思wps)

    发生异常,无法分享怎么办(发生异常,无法分享什么意思wps)

  • sandisksecureaccess是什么软件

    sandisksecureaccess是什么软件

  • 腾讯课堂支持电脑版吗(腾讯课堂有电视版吗)

    腾讯课堂支持电脑版吗(腾讯课堂有电视版吗)

  • 腾讯会议电脑可以用吗(腾讯会议电脑可以签到吗)

    腾讯会议电脑可以用吗(腾讯会议电脑可以签到吗)

  • qq安全码是什么(qq安全码是什么6位数)

    qq安全码是什么(qq安全码是什么6位数)

  • 小红书会员可以只开一个月吗(小红书会员可以干嘛)

    小红书会员可以只开一个月吗(小红书会员可以干嘛)

  • cd和dvd光盘是否通用(cd-r光盘和dvd-r)

    cd和dvd光盘是否通用(cd-r光盘和dvd-r)

  • wps账号可以几个人用(wps一个账号可以登录几台设备)

    wps账号可以几个人用(wps一个账号可以登录几台设备)

  • 已购买成功的淘宝订单怎么删除(淘宝已购买宝贝)

    已购买成功的淘宝订单怎么删除(淘宝已购买宝贝)

  • 探探能不能隐身上线(探探能设置隐身吗)

    探探能不能隐身上线(探探能设置隐身吗)

  • 抖音视频怎么大于15秒(抖音视频怎么大眼)

    抖音视频怎么大于15秒(抖音视频怎么大眼)

  • airpods电池多久报废(苹果airpods电池寿命几年)

    airpods电池多久报废(苹果airpods电池寿命几年)

  • y93简易桌面在哪(vivoy31s简易桌面)

    y93简易桌面在哪(vivoy31s简易桌面)

  • 退群别人能看到吗(退群别人能看到朋友圈吗)

    退群别人能看到吗(退群别人能看到朋友圈吗)

  • vetas是什么牌子(vETAS是什么牌子手机)

    vetas是什么牌子(vETAS是什么牌子手机)

  • 三星手机气密性检查方法(三星手机气密性能修复吗)

    三星手机气密性检查方法(三星手机气密性能修复吗)

  • 华为m5和pro区别(华为平板m5pro和m5 10.8英寸对比)

    华为m5和pro区别(华为平板m5pro和m5 10.8英寸对比)

  • 如何关闭QQ厘米秀(qq 关闭厘米)

    如何关闭QQ厘米秀(qq 关闭厘米)

  • 企业租车能抵增值税吗
  • 私营独资企业交个税还是企税
  • 税法有哪些构成要素及各要素之间有何关系
  • 其他应付款借方余额怎么调整
  • 可供出售金融资产和交易性金融资产
  • 饭店发光板图片大全
  • 项目奖金个人所得税怎么算
  • 个人向个人借款100万交税吗
  • 小规模纳税人计税方法
  • 税务外管证取消了吗
  • 工程的管理费收入怎么算
  • 免征增值税发票税率
  • 房地产开发企业土地增值税清算
  • 远期汇票分为哪几种
  • 扶贫费用事业单位账务处理怎么做?
  • 分公司注销存货处理
  • 建筑业异地预交税款怎么入库
  • 公司购买销售材料怎么写会计分录?
  • 研发准备金期末余额帐务处理是怎样的?
  • 增值税发票地址开错了有影响吗
  • 自制半成品生产成本
  • 分公司年报怎么查
  • 小规模纳税人如何开专票
  • 企业所得税的工资薪金包括社保
  • linux系统怎么查看mac地址
  • 企业收到政府拆迁补偿款要交税吗怎么做账
  • 20个健康生活常识
  • 苹果保护你的隐私
  • 营改增的会计分录
  • 拨缴经费收入上解部分
  • 2023年最全盘点 | 16款跨平台应用程序开发框架
  • discuz论坛账号
  • 电子回单是什么样子
  • 留抵退税税务总局规定的其他情形
  • 小规模纳税人购进农产品可以抵扣进项税吗
  • mongodb的使用教程
  • 赠品视同销售价格如何确定
  • 运输公司开具的增值税专用发票谁抵扣
  • 烟草的发票可以报销吗
  • mysql误删数据
  • 采购原材料未入库
  • 营业税金及附加计入什么科目
  • 应付账款的入账价值应当包括增值税的进项税额
  • 个体户查账征收和核定征收哪个好
  • 企业出售商铺需交税吗
  • 其他应付款贷方什么意思
  • 小微企业营业外收入二级科目怎么
  • 公司被私募基金收购有啥影响 裁员
  • 中小企业会计建议和意见
  • 销售怎么写啊
  • 删除mysql数据库中表的内容命令
  • 建立索引mysql
  • sql数据库检查命令
  • mysql 5.7.17 winx64免安装版配置方法图文教程
  • 删除默认操作系统
  • centosip配置
  • mac购买建议
  • linux中more命令详解
  • linux如何调出鼠标
  • win10rs2是哪个版本
  • dreamweaver是干嘛的
  • win10连无线网络受限
  • windows8快速启动设置
  • 刻录ghost安装光盘
  • 怎么用win7兼容模式运行
  • win7使用临时配置文件登录
  • nodejs 用途
  • andriod+nfc
  • 下列关于eval()函数的说法正确的是
  • node.js详解
  • 关于numpy中loadtxt函数的说法
  • 创建简单的Web网页实验总结ASP
  • itween常用方法
  • jquery获取动态生成的元素的值
  • 税务绩效管理存在不足
  • 广西自然人税收管理系统扣缴客户端手机版
  • 厦门怎么查询自己名下电动自行车
  • 江西省税务局官网查询系统
  • 国税网查发票真伪
  • 珠海市高新区国土局局长
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设