
在视频播放应用中,不同的视频类型(如直播、点播、短视频)虽然播放流程相似,但具体的加载和播放策略可能有所不同。
肖哥弹架构 跟大家“弹弹” 设计模式,需要代码关注
欢迎 点赞,点赞,点赞。
关注公号Solomon肖哥弹架构获取更多精彩内容
2. 为什么要使用模板方法设计模式
模板方法模式允许定义一个业务行为的框架,将某些步骤的实现延迟到子类中。这使得子类可以在不改变行为结构的情况下,重新定义行为的特定步骤。
3. 标准模板方法设计模式图

4. 业务模板方法设计模式图

5. 业务代码参考
// 视频播放器抽象类
abstract class VideoPlayer {
// 模板方法:定义播放视频的算法框架
public final void play() {
loadVideo();
playVideo();
System.out.println("视频播放完成");
}
// 抽象方法:由子类实现具体的加载视频逻辑
public abstract void loadVideo();
// 钩子方法:子类可以扩展播放视频前的准备工作
protected void playVideo() {
System.out.println("开始播放视频");
}
}
// 直播视频播放器
class LiveVideoPlayer extends VideoPlayer {
@Override
public void loadVideo() {
// 加载直播视频资源
System.out.println("加载直播视频资源");
}
@Override
protected void playVideo() {
// 直播视频播放逻辑
System.out.println("直播视频开始播放");
}
}
// 点播视频播放器
class VODPlayer extends VideoPlayer {
@Override
public void loadVideo() {
// 加载点播视频资源
System.out.println("加载点播视频资源");
}
@Override
protected void playVideo() {
// 点播视频播放逻辑
System.out.println("点播视频开始播放");
}
}
// 短视频播放器
class ShortVideoPlayer extends VideoPlayer {
@Override
public void loadVideo() {
// 加载短视频资源
System.out.println("加载短视频资源");
}
@Override
protected void playVideo() {
// 短视频播放逻辑
System.out.println("短视频开始播放");
}
}
// 客户端使用
class VideoApp {
public static void main(String[] args) {
VideoPlayer livePlayer = new LiveVideoPlayer();
livePlayer.play();
VideoPlayer vodPlayer = new VODPlayer();
vodPlayer.play();
VideoPlayer shortPlayer = new ShortVideoPlayer();
shortPlayer.play();
}
}
6. 使用模板方法设计模式的好处
- 行为结构一致性:确保所有视频类型的播放流程保持一致。
-
扩展性:新增视频类型时,只需继承
VideoPlayer
类并实现相应的加载逻辑。
7. 其他使用模板方法设计模式场景参考
- 搜索引擎:不同类型内容(如网页、图片、视频)的搜索算法框架一致,但索引和检索策略可能不同。
- 图形编辑器:不同格式(如JPEG、PNG、GIF)的图像保存流程相似,但具体的编码实现不同。
8. 可参考开源框架
- JUnit:使用模板方法模式来执行测试用例的固定流程。
总结
模板方法模式通过定义算法的框架,允许子类在不改变算法结构的前提下,重新定义算法的特定步骤,提高了代码的复用性和可扩展性。
历史热点文章
- 外观模式(Facade Pattern):微服务架构中的数据库访问实战案例分析
- 代理模式(Proxy Pattern):权限校验API调用实战案例分析
- 桥接模式(Bridge Pattern):多样式用户界面组件实战案例分析
- 组合模式(Composite Pattern): 在线教育平台课程管理实战案例分析
- 享元模式(Flyweight Pattern):网页游戏中的角色对象管理实战案例分析
- 观察者模式(Observer Pattern):股票交易系统实战案例分析
- 策略模式(Strategy Pattern):电商平台的优惠券系统实战案例分析
- 模板方法模式(Template Method Pattern):视频播放应用实战案例分析
- 命令模式(Command Pattern):网络爬虫任务队列实战案例分析
- 迭代器模式(Iterator Pattern):电商平台商品分类浏览实战案例分析
- 中介者模式(Mediator Pattern):即时通讯软件实战案例分析
- 备忘录模式(Memento Pattern):游戏存档系统实战案例分析
- 状态模式(State Pattern):电商平台订单状态管理实战案例分析
- 责任链模式(Chain of Responsibility Pattern):电商平台的订单审批流程实战案例分析
- 访问者模式(Visitor Pattern):电商平台商品访问统计实战案例分析
- 工厂方法模式(Factory Method Pattern): 电商多种支付实战案例分析
- 抽象工厂模式(Abstract Factory Pattern):多风格桌面应用实战案例分析
- 建造者模式(Builder Pattern): 在线订单系统实战案例分析
- 原型模式(Prototype Pattern): 云服务环境配置实战案例分析
- 适配器模式(Adapter Pattern):第三方支付集成实战案例分析
- 装饰器模式(Decorator Pattern):电商平台商品价格策略实战案例分析
- 单例模式(Singleton Pattern):购物车实战案例分析
网友评论