您的位置:首页 > 娱乐 > 明星 > 上海市政府官网公告_微信怎么开店铺小程序_seo如何优化网站步骤_关键词seo排名公司

上海市政府官网公告_微信怎么开店铺小程序_seo如何优化网站步骤_关键词seo排名公司

2024/12/27 15:59:20 来源:https://blog.csdn.net/huaanxiang/article/details/144027259  浏览:    关键词:上海市政府官网公告_微信怎么开店铺小程序_seo如何优化网站步骤_关键词seo排名公司
上海市政府官网公告_微信怎么开店铺小程序_seo如何优化网站步骤_关键词seo排名公司

Template Method 设计模式 是一种行为型设计模式,用于定义一个操作的骨架,将某些步骤延迟到子类中实现,从而允许子类在不改变整体算法结构的情况下重新定义某些步骤。

在 Python 中,Template Method 模式通常使用基类的方法来定义通用算法框架,并通过子类覆盖特定步骤实现具体逻辑。


结构

  1. 抽象类: 提供算法的骨架,包含模板方法(定义算法步骤的顺序)和一些需要子类实现的抽象方法。
  2. 具体类: 实现抽象方法,定义算法的具体步骤。

代码示例

from abc import ABC, abstractmethodclass AbstractWorkflow(ABC):"""抽象类,定义算法的骨架"""def template_method(self):"""模板方法,定义算法的框架"""self.step_one()self.step_two()self.hook()  # 可选步骤self.step_three()def step_one(self):"""通用步骤"""print("Step 1: Common implementation.")@abstractmethoddef step_two(self):"""需要子类实现的抽象方法"""pass@abstractmethoddef step_three(self):"""需要子类实现的抽象方法"""passdef hook(self):"""钩子方法,子类可选择性覆盖"""print("Default hook: Optional step.")class ConcreteWorkflowA(AbstractWorkflow):"""具体实现 A"""def step_two(self):print("Step 2 (A): Specific implementation for A.")def step_three(self):print("Step 3 (A): Specific implementation for A.")class ConcreteWorkflowB(AbstractWorkflow):"""具体实现 B"""def step_two(self):print("Step 2 (B): Specific implementation for B.")def step_three(self):print("Step 3 (B): Specific implementation for B.")def hook(self):print("Custom hook: Overridden by B.")# 客户端代码
def client_code(workflow: AbstractWorkflow):workflow.template_method()if __name__ == "__main__":print("Running ConcreteWorkflowA:")client_code(ConcreteWorkflowA())print("\nRunning ConcreteWorkflowB:")client_code(ConcreteWorkflowB())

运行结果

Running ConcreteWorkflowA:
Step 1: Common implementation.
Step 2 (A): Specific implementation for A.
Default hook: Optional step.
Step 3 (A): Specific implementation for A.Running ConcreteWorkflowB:
Step 1: Common implementation.
Step 2 (B): Specific implementation for B.
Custom hook: Overridden by B.
Step 3 (B): Specific implementation for B.

模式要点

  1. 模板方法: 定义算法骨架,控制步骤的调用顺序。
  2. 抽象方法: 强制子类实现特定步骤。
  3. 钩子方法: 提供可选的扩展点,允许子类覆盖。
  4. 封装不变部分: 将通用逻辑放在基类中,确保不被子类破坏。
  5. 开放/封闭原则: 算法结构对扩展开放,对修改封闭。

优点

  • 避免重复代码,将通用逻辑提取到基类。
  • 子类只需关注特定步骤的实现,简化开发。
  • 灵活扩展特定步骤,而无需修改算法框架。

缺点

  • 如果算法步骤较多,可能导致类数量增加。
  • 继承限制了灵活性,无法动态改变算法步骤。

适用场景

  • 多个子类需要共享算法的通用部分。
  • 需要通过子类定制算法的某些步骤。

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com