首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
Oracle
›
计划模式 22 模板方法模式
返回列表
发新帖
计划模式 22 模板方法模式
[复制链接]
发表于 2026-1-22 08:31:58
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
计划模式 22
创建型模式(5):工厂方法模式、抽象工厂模式、单例模式、制作者模式、原型模式
结构型模式(7):适配器模式、桥接模式、组合模式、装饰者模式、外貌模式、享元模式、署理模式
运动型模式(11):责任链模式、下令模式、表明器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、战略模式、
模板方法模式
、访问者模式
模板方法模式(Template Method Pattern)
1 界说
模板方法模式通过在基类中界说一个模板方法,该方法封装了一个算法的固定步调,然后答应子类实现或重写这些步调。如许,子类可以定制算法的具体运动,而无需改变算法的团体结构。
2 结构
模板方法模式包罗以下脚色:
抽象类(AbstractClass)
: 界说模板方法和算法的骨架。模板方法按照固定的步调调用抽象方法或具体方法。
具体类(ConcreteClass)
: 继续自抽象类,实现或重写抽象方法,界说算法的具体步调。
UML 类图
+---------------------------+
| AbstractClass |
+---------------------------+
| + TemplateMethod(): void |
| + Step1(): void |
| + Step2(): void |
| - Step3(): void |
+---------------------------+
^
|
+-------------------+
| ConcreteClass |
+-------------------+
| - Step3(): void |
+-------------------+
复制
代码
3 示例
代码
假设我们要制作一杯饮料,制作的过程包罗煮水、冲泡、倒入杯中、添加配料等步调。咖啡和茶是两种差别的饮料,它们在制作过程中的步调根本雷同,但在某些步调上有所差别。我们可以利用模板方法模式来实现这个场景。
抽象类
// 抽象类 - 饮料制作过程
public abstract class Beverage
{
// 模板方法
public void PrepareRecipe()
{
BoilWater();
Brew();
PourInCup();
AddCondiments();
}
// 具体方法 - 煮水
private void BoilWater()
{
Console.WriteLine("Boiling water");
}
// 抽象方法 - 冲泡
protected abstract void Brew();
// 具体方法 - 倒入杯中
private void PourInCup()
{
Console.WriteLine("Pouring into cup");
}
// 抽象方法 - 添加配料
protected abstract void AddCondiments();
}
复制
代码
具体类
// 具体类 - 茶
public class Tea : Beverage
{
protected override void Brew()
{
Console.WriteLine("Steeping the tea");
}
protected override void AddCondiments()
{
Console.WriteLine("Adding lemon");
}
}
// 具体类 - 咖啡
public class Coffee : Beverage
{
protected override void Brew()
{
Console.WriteLine("Dripping coffee through filter");
}
protected override void AddCondiments()
{
Console.WriteLine("Adding sugar and milk");
}
}
复制代码
客户端代码
class Program
{
static void Main(string[] args)
{
Beverage tea = new Tea();
tea.PrepareRecipe(); // 制作茶
Console.WriteLine();
Beverage coffee = new Coffee();
coffee.PrepareRecipe(); // 制作咖啡
}
}
复制代码
运行效果
Boiling water
Steeping the tea
Pouring into cup
Adding lemon
Boiling water
Dripping coffee through filter
Pouring into cup
Adding sugar and milk
复制代码
在这个例子中,Beverage 是抽象类,界说了一个模板方法 PrepareRecipe(),它包罗了制作饮料的固定步调。这些步调中,有些是具体实现的(如 BoilWater() 和 PourInCup()),而有些是抽象方法,由子类 Tea 和 Coffee 来实现(如 Brew() 和 AddCondiments())。客户端代码可以利用差别的具体类来制作差别的饮料,而不必要关心具体的实现细节。
4 特点
长处
:
代码复用
: 将通用的算法步调封装到基类中,子类只必要实现差异化的部门,淘汰了重复代码。
扩展性强
: 子类可以根据必要重写或扩展某些步调,增长算法的机动性。
控制算法结构
: 父类界说了算法的骨架,确保了算法的团体结构不被子类粉碎。
缺点
:
增长代码复杂性
: 由于引入了继续关系和抽象方法,大概会使代码结构变得复杂。
对子类的依靠
: 父类依靠子类来实现某些步调,大概导致子类必须实现某些方法,纵然这些方法在特定环境下并不必要。
5 实用场景
多个类有相似的利用步调
: 当多个类的利用步调大抵雷同时,可以利用模板方法模式将雷同的部门提取到抽象类中。
算法必要多个步调
: 当算法必要分解为多个步调,而且这些步调中有些是固定的,有些是可变的,可以利用模板方法模式。
控制算法的流程
: 当必要确保算法的某些步调必须按照肯定的序次实行时,可以利用模板方法模式。
6 总结
模板方法模式通过将通用的算法步调封装到抽象类中,答应子类重写或扩展特定的步调,实现了算法的复用和扩展。它确保了算法的团体结构不被粉碎,同时为子类提供了机动性。在多个类具有相似的利用步调时,模板方法模式是一种非常有效的计划模式。
回复
使用道具
举报
返回列表
浏览过的版块
Java
主机安全
IOS
SQL-Server
运维.售后
知者何南
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表