网站域名备案与不备案的区别,哪种网站名称容易通过备案审核,北京建网站公司价格,怎样做app目录 一、 啥是模板方法模式#xff1f;二、 为什么要用模板方法模式#xff1f;三、 模板方法模式的实现方式四、 模板方法模式的优缺点五、 模板方法模式的应用场景六、 总结 #x1f31f;我的其他文章也讲解的比较有趣#x1f601;#xff0c;如果喜欢博主的讲解方式二、 为什么要用模板方法模式三、 模板方法模式的实现方式四、 模板方法模式的优缺点五、 模板方法模式的应用场景六、 总结 我的其他文章也讲解的比较有趣如果喜欢博主的讲解方式可以多多支持一下感谢 了解享元模式请看 (十 二)趣学设计模式 之 享元模式 ✨更多请看个人主页 码熔burning 这篇文章带你详细认识一下设计模式中的模版方法模式
一、 啥是模板方法模式
想象一下你想要制作一杯咖啡 ☕。 制作咖啡的步骤大致相同烧水 、冲泡咖啡 ☕、倒入杯中 、加入调料 。 但是不同的咖啡加入的调料可能不同 (比如拿铁加牛奶美式加糖)。
模板方法模式就是定义一个操作中的算法的骨架而将一些步骤延迟到子类中 模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤 。
简单来说就是定义一个模板规定了算法的执行流程具体的实现细节由子类来完成
你有一系列相似的算法它们的执行流程基本相同 就像制作不同口味的咖啡 ☕你想让子类可以灵活地定制算法的某些步骤 就像不同的咖啡可以加入不同的调料 你想避免代码重复 就像你不想在每个咖啡类中都重复编写烧水、冲泡咖啡、倒入杯中的代码 ☕
二、 为什么要用模板方法模式
用模板方法模式好处多多
代码复用 将公共代码提取到父类中减少代码重复 ♻️控制算法流程 父类控制算法的执行流程子类只能定制特定的步骤 提高扩展性 可以方便地添加新的算法只需要创建新的子类即可 ➕符合开闭原则 可以在不修改父类代码的情况下扩展算法的功能 ✅
三、 模板方法模式的实现方式
模板方法模式主要包含以下几个角色
AbstractClass抽象类 定义抽象的模板方法以及一些具体的辅助方法。 ☕ (比如咖啡基类)ConcreteClass具体类 实现抽象类中的抽象方法完成算法的特定步骤。 ☕ (比如拿铁咖啡、美式咖啡)
代码示例
// 抽象类咖啡
public abstract class Coffee {// 模板方法制作咖啡public final void makeCoffee() {boilWater(); // 烧水brewCoffee(); // 冲泡咖啡pourInCup(); // 倒入杯中addCondiments(); // 加入调料}// 具体方法烧水private void boilWater() {System.out.println(烧水);}// 抽象方法冲泡咖啡protected abstract void brewCoffee();// 具体方法倒入杯中private void pourInCup() {System.out.println(倒入杯中);}// 抽象方法加入调料protected abstract void addCondiments();
}// 具体类拿铁咖啡
public class LatteCoffee extends Coffee {Overrideprotected void brewCoffee() {System.out.println(冲泡拿铁咖啡);}Overrideprotected void addCondiments() {System.out.println(加入牛奶);}
}// 具体类美式咖啡
public class AmericanCoffee extends Coffee {Overrideprotected void brewCoffee() {System.out.println(冲泡美式咖啡);}Overrideprotected void addCondiments() {System.out.println(加入糖);}
}// 客户端
public class Client {public static void main(String[] args) {Coffee latte new LatteCoffee(); // 创建拿铁咖啡latte.makeCoffee(); // 制作拿铁咖啡System.out.println(---);Coffee american new AmericanCoffee(); // 创建美式咖啡american.makeCoffee(); // 制作美式咖啡}
}分析
Coffee 是抽象类定义了制作咖啡的模板方法 makeCoffee()以及一些具体的辅助方法 boilWater() 和 pourInCup()还有一些抽象方法 brewCoffee() 和 addCondiments()。LatteCoffee 和 AmericanCoffee 是具体类实现了抽象类中的抽象方法完成了冲泡咖啡和加入调料的特定步骤。
输出结果
烧水
冲泡拿铁咖啡
倒入杯中
加入牛奶
---
烧水
冲泡美式咖啡
倒入杯中
加入糖四、 模板方法模式的优缺点
优点
代码复用 ♻️控制算法流程 提高扩展性 ➕符合开闭原则 ✅
缺点
增加了系统的复杂度 抽象类定义了算法的骨架子类必须遵循这个骨架灵活性受到限制 ⛓️每个不同的实现都需要定义一个子类导致类的数量增加
五、 模板方法模式的应用场景
你有一系列相似的算法它们的执行流程基本相同 就像制作不同口味的咖啡 ☕你想让子类可以灵活地定制算法的某些步骤 就像不同的咖啡可以加入不同的调料 你想避免代码重复 就像你不想在每个咖啡类中都重复编写烧水、冲泡咖啡、倒入杯中的代码 ☕数据库访问 数据库访问的流程通常是建立连接、执行查询、处理结果、关闭连接。 可以使用模板方法模式来定义这个流程具体的查询语句和结果处理由子类来完成。Servlet处理 Servlet处理请求的流程通常是接收请求、处理请求、发送响应。 可以使用模板方法模式来定义这个流程具体的请求处理由子类来完成。
六、 总结
模板方法模式就像定义一个模板规定了算法的执行流程具体的实现细节由子类来完成 主要包含抽象类和具体类两个角色 优点是代码复用、控制算法流程、提高扩展性、符合开闭原则 缺点是增加复杂度、灵活性受到限制、类的数量增加 适用于有一系列相似的算法它们的执行流程基本相同且需要让子类灵活地定制算法的某些步骤的场景
希望这篇文章能让你彻底理解模板方法模式 祝你学习愉快 看完请看(十 四)趣学设计模式 之 策略模式