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

  • 个税抵扣申报晚好了需要跟公司申报吗?
  • 保理公司会计核算讲解
  • 购买水果属于什么费用
  • 发票替代票
  • 增值税进项税转出政策依据
  • 附加税减免吗
  • 税务变更需要哪些材料
  • 纳税人减免税备案登记表是在税务局领吗
  • 对公账户的理财收入计入什么科目
  • 负数发票需要抵扣吗
  • 季度报没有报怎么办
  • 公司用窗帘用什么颜色
  • 上月未抵扣进项增值税
  • 进口增值税计入关税完税价格吗
  • 股东可以以知识产权作价出资吗
  • 给子公司拨款怎么记账
  • 房地产税是否存在退税
  • 企业在国内采购并运往境外作为投资的货物
  • 内部职工销售佣金计入
  • 我公司以房产土地为主
  • 户外拓展费用入什么科目
  • 税务稽查补缴增值税税款的账务处理
  • 年终股东利润分配方案
  • 工会经费怎么使用
  • 一般纳税人车辆过户给个人开票几个点
  • 苹果取消macbook
  • vue大屏组件库
  • 罚款计入营业外支出影响当期损益
  • PHP:imagefontwidth()的用法_GD库图像处理函数
  • 今日七夕祝福语
  • 出口零退税率商品目录
  • yolov5的使用
  • 固定资产已提完折旧后丢失怎么处理
  • 基于matlab的随机森林回归和交叉验证
  • 卷卷卷卷卷
  • ninja命令使用
  • 企业缴纳职工社保需要每月去社保局吗
  • 丧葬补贴金和抚恤金怎样领取
  • 微众银行贷款到期晚2天还
  • 其他综合收益在资产负债表中如何填列
  • 财产保险费用会增加吗
  • 工资次月发放法律规定
  • sqlserver2005导出数据
  • 印花税会计处理办法
  • 开个人劳务票需要本人去吗
  • 工程施工和工程结算对冲有差额的会计分录
  • excel账务处理心得
  • 营改增后出售土地如何缴纳增值税
  • 职工薪酬费用属于什么费用
  • 如何理解预付年金终值期数和系数和记忆方法
  • 费用报销单和支付证明单的区别
  • 利润分配未分配利润怎么结转
  • 空调的预计净残值是什么
  • 年初速动比率怎么算
  • centos更新命令
  • bios是什么怎么设置
  • windows模拟器(可安装电脑软件)
  • xp系统如何删除用户
  • linux常用命令 删除
  • qqexternal.exe是什么进程如何删除(CPU的使用率在90%)
  • mac的itunes怎么用
  • win8操作系统界面
  • windows xp 配置
  • linux网络优化
  • 原版windowsxp安装
  • win8如何切换用户登录
  • 检查linux是否安装了,可用哪些命令
  • android 自定义drawable
  • bat 命令大全
  • cocos2dx4.0教程
  • unity手机游戏开发教程
  • node.js的安装方法
  • jquery读写文件
  • jquery的checkbox,radio,select等方法小结
  • 吉林省税务局发票查询真伪
  • 如何知道公司所有账户
  • 国际货运怎么代理
  • 政治轮训的效果
  • 遵从和尊重
  • 朝阳地税局官网
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设