Java设计模式-10 、模板方法模式

news/2024/10/21 7:58:32/

模板方法模式

(定义一个操作中的算法的框 架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义 该算法的某些特定步骤。)

个人理解:即把公共的东西提取出来封装成一个方法,不同的部分封装成一个抽象方法。子类继承模板类。重写抽象方法即可。

AbstractClass 叫做抽象模板,它的方法分为两类:

● 基本方法 基本方法也叫做基本操作,是由子类实现的方法,并且在模板方法被调用。

● 模板方法 可以有一个或几个,一般是一个具体方法,也就是一个框架,实现对基本方法的调 度,完成固定的逻辑。 注意: 为了防止恶意的操作,一般模板方法都加上 final 关键字,不允许被覆 写。 具体模板:ConcreteClass1 和 ConcreteClass2 属于具体模板,实现父类所定义的 一个或多个抽象方法,也就是父类定义的基本方法在子类中得以实现

使用场景:

● 多个子类有公有的方法,并且逻辑基本相同时。

● 重要、复杂的算法,可以把核心算法设计为模板方法,周边的相关细节功能则由 各个子类实现。

● 重构时,模板方法模式是一个经常使用的模式,把相同的代码抽取到父类中,然 后通过钩子函数(见“模板方法模式的扩展”)约束其行为。

代码:

1 抽象模板父类

public abstract class ToPay {public abstract void acceptParameter();public abstract void check();public abstract void getPlayUrl();//公共方法public void play() {this.acceptParameter();this.check();this.getPlayUrl();}public abstract void acceptNotify();}

 2 子类A

public class WeixinPay extends ToPay {@Overridepublic void acceptParameter() {System.out.println("微信接受参数");}@Overridepublic void check() {System.out.println("微信校验参数");}@Overridepublic void getPlayUrl() {System.out.println("微信支付链接");}@Overridepublic void acceptNotify() {System.out.println("微信提醒");}
}

 3 子类B

public class ZhifubaoPly extends ToPay {@Overridepublic void acceptParameter() {System.out.println("支付宝接受参数");}@Overridepublic void check() {System.out.println("支付宝校验参数");}@Overridepublic void getPlayUrl() {System.out.println("支付宝支付链接");}@Overridepublic void acceptNotify() {System.out.println("支付宝提醒");}
}

4 验证

public class TMain {public static void main(String[] args) {WeixinPay wp = new WeixinPay();ZhifubaoPly zp = new ZhifubaoPly();wp.play();zp.play();zp.acceptNotify();}
}

5 结果:

 

 

场景:

多个子类的方法重复的清情况下,可以抽出来公共方法。

总结:

优点
1.减少代码的重复性;

2.子类实现算法的某些细节,有助于算法的扩展;

3.通过一个父类调用子类实现的操作,通过子类扩展增加新的行为,符合“开放-封闭原则“;

缺点

1.每个不同的实现都需要定义一个子类,这会导致类的个数的增加,设计更加抽象。
 


http://www.ppmy.cn/news/35982.html

相关文章

记录一下,win11,单击zip文件后文件管理器闪退

新买的笔记本电脑,正版win11家庭版,压缩软件安装的是winrar,安装了其他一堆软件后,发现文件管理器经常莫名闪退。多次尝试之后,发现是只要是单击zip文件后就会文件管理器闪退,然后恢复桌面。 1. 百度了“w…

走进小程序【二】微信小程序环境搭建并初始化第一个小程序项目

文章目录🌟前言🌟开始🌟微信开发者开发工具🌟安装微信开发者工具🌟你的第一个小程序🌟目录结构🌟写在最后🌟前言 哈喽小伙伴们,上一期带大家简单了解一下微信小程序&…

3月份读文+学习思考记录

基于GPT3.5搭建定制化知识库 https://mp.weixin.qq.com/s?__bizMzIyNDAzMzYxNQ&mid2652028778&idx1&sn985a386f915dea0d4dc97186af7c50b6&srcid0316LqkslRQXM1UyluqQFTxe 当然,还有一个问题:程序员怎么办?程序员会被替代吗…

nginx-面试篇-11

nginx性能优化 当我需要进行性能优化时,说明我们服务器无法满足日益增长的业务。性能优化是一个比较大的课题,需要从以下几个方面进行探讨 当前系统结构瓶颈 了解业务模式 性能与安全 当前系统结构瓶颈 首先需要了解的是当前系统瓶颈,用…

线程池的讲解和实现

🚀🚀🚀🚀🚀🚀🚀大家好,今天为大家带来线程池相关知识的讲解,并且实现一个线程池 🌸🌸🌸🌸🌸🌸🌸🌸…

2023字节、腾讯、阿里等6家大厂Java开发面试真题+高频面试题总结

又是一年求职面试旺季,不管你是新进职场小白还是职场老鸟,这些关于java程序员面试应准备的东西你都应该知道。 面试前需要准备 1. Java 八股文:了解常考的题型和回答思路; 2. 算法:刷100-200 道题,记住刷…

Camel Quartz Component创建QuartzScheduler的过程

Camel Quartz Component创建QuartzScheduler的过程QuartzScheduler的创建通过Spring配置文件调整Quartz配置参考QuartzScheduler的创建 在QuartzComponent启动时会对QuartzScheduler进行初始化。 org.apache.camel.component.quartz.QuartzComponent#doStart 在创建QuartzSc…

什么是外盘期货?外盘期货是怎么交易的?

外盘期货是指交易所建立在中国大陆以外的期货交易,以美国、英国、伦敦等交易所内的产品为常见交易期货合约,期货合约就是指由期货交易所统一制定的、规定在将来某一特定的时间和地点交割一定数量标的,有些美国期货合约品种如:大豆…