当前位置: 首页 > wzjs >正文

河北做wap网站好的网站或网页

河北做wap网站,好的网站或网页,做100个网站效果,专业app开发制作团队文章目录 前言一、模板方法模式二、模板方法模式示例 前言 GOF设计模式分三大类: 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。结构型模式:关注类和对象之间…

文章目录

  • 前言
  • 一、模板方法模式
  • 二、模板方法模式示例


前言

GOF设计模式分三大类:

  • 创建型模式:关注对象的创建过程,包括单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。
  • 结构型模式:关注类和对象之间的组合,包括适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。
  • 行为型模式:关注对象之间的交互,包括职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。

一、模板方法模式

模板方法模式(Template Method Pattern)

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

  • 解决问题:如何为一个复杂算法的某些步骤提供多种实现方式?

  • 使用场景:

    • 对一些复杂的算法进行分割,将其算法中固定不变的部分设计为模板方法和父类具体方法,而一些可以改变的细节由其子类来实现。即一次性地实现一个算法的不变部分,并将可变的行为留给子类来实现。
    • 各子类中公共的行为应被提取出来并集中到一个公共父类中以避免代码重复。
    • 需要通过子类来决定父类算法中某个步骤是否执行,实现子类对父类的反向控制。
  • 组成:

    • AbstractClass(抽象类):在抽象类中定义了一系列基本操作(Primitive Operations),这些基本操作可以是具体的,也可以是抽象的。每个基本操作对应算法的一个步骤,在其子类中可以重定义或实现这些步骤。同时,在抽象类中实现了一个模板方法(Template Method),用于定义一个算法的框架。模板方法不仅可以调用在抽象类中实现的基本方法,也可以调用在抽象类的子类中实现的基本方法,还可以调用其他对象中的方法。
    • ConcreteClass(具体子类):它是抽象类的子类,用于实现在父类中声明的抽象基本操作以完成子类特定算法的步骤,也可以覆盖在父类中已经实现的具体基本操作。
  • 补充说明:

    • 通过使用模板方法模式,可以将一些复杂流程的实现步骤封装在一系列基本方法中。
    • 模板方法模式是一种基于继承的代码复用基本技术。
    • 在抽象父类中提供一个称之为模板方法的方法来定义这些基本方法的执行次序,而通过其子类来覆盖某些步骤,从而使得相同的算法框架可以有不同的执行结果。
    • 模板方法模式广泛应用于框架设计(例如Spring等)中,以确保通过父类来控制处理流程的逻辑顺序(例如框架的初始化、测试流程的设置等)。
  • 优点:

    • 模板方法模式在父类中形式化地定义一个算法,而由它的子类来实现细节的处理。
    • 模板方法模式是一种代码复用技术,它在类库设计中尤为重要。
    • 模板方法模式可实现一种反向控制结构。
    • 符合单一职责原则和开闭原则。
  • 缺点:

    • 类的个数增加

在这里插入图片描述

二、模板方法模式示例

使用模板方法模式设计银行利息计算模块

  • 利息计算流程如下:
    • (1)系统根据账号和密码验证用户信息,如果用户信息错误,系统显示出错提示。
    • (2)如果用户信息正确,则根据用户类型的不同使用不同的利息计算公式计算利息(例如活期账户和定期账户具有不同的利息计算公式)。
    • (3)系统显示利息。
  • Account充当抽象类角色,CurrentAccount和SavingAccount充当具体子类角色。
"""模板方法模式"""### 抽象类class Account:"""账户"""def validate(self, account: str, password: str) -> bool:"""基本,具体方法"""print(f"账号:{account},密码:{password}")if account == "张三" and password == "123456":return Truereturn Falsedef calculate_interest(self):"""基本,抽象方法"""raise NotImplementedErrordef display(self):"""基本,具体方法"""print("显示利息!")def handle(self, account: str, password: str):"""模板方法"""if self.validate(account, password):self.calculate_interest()self.display()else:print("账号或密码错误!")### 具体子类class CurrentAccount(Account):"""活期账户"""def calculate_interest(self):"""重写抽象方法"""print("按活期利率计算利息!")class SavingAccount(Account):"""定期账户"""def calculate_interest(self):"""重写抽象方法"""print("按定期利率计算利息!")
  • 具体子类的类名存储在配置文件 template_method_conf.json
{"class_name": "SavingAccount"
}
  • 使用工具类JsonUtil来读取配置文件
# 模块 utils.py
from pathlib import Path
import jsonclass JsonUtil:@staticmethoddef get_value(key: str = "class_name", conf_file="template_method_conf.json"):"""读取配置文件,返回配置文件中的配置"""path = Path(conf_file)contents = path.read_text(encoding="utf-8")conf = json.loads(contents)return conf.get(key, None)
  • 客户端代码
"""模板方法模式:客户端代码"""from utils import JsonUtil
from template_method import Accountif __name__ == "__main__":account_type = JsonUtil.get_value(conf_file="template_method_conf.json")account: Account = getattr(__import__("template_method"), account_type)()account.handle(account="张三", password="123456")
  • 输出结果
账号:张三,密码:123456
按定期利率计算利息!
显示利息!

您正在阅读的是《设计模式Python版》专栏!关注不迷路~

http://www.dtcms.com/wzjs/424704.html

相关文章:

  • 网站开发项目技能比赛获奖报道镇江seo
  • 网站内容编辑器bing搜索引擎国际版
  • 做网站有自己的服务器长沙网络推广
  • 做网站手把手什么是网络营销策划
  • 网页网站开发设计工作前景免费写文章的软件
  • 济宁城乡住房建设网站域名是什么意思
  • 做网站能挣钱不独立站seo外链平台
  • 武汉工商网站查询企业信息搜索引擎优化seo培训
  • 做网站价格网页设计与制作步骤
  • 给上市公司做网站有什么用sem营销是什么意思
  • 有了php源码怎么做网站口碑营销例子
  • 怎样做网站导航栏成人短期电脑培训班学费
  • wordpress 模板 日历重庆百度整站优化
  • 龙岗网站设计信息海外推广
  • 男女直接做的视频 视频网站掉发脱发严重是什么原因
  • 莆田制作公司网站手机网站制作软件
  • 施工企业资质新标准2022九江seo
  • 做普通网站多少钱网络推广哪家好
  • 福建省幕墙建设网站要报备吗营销型网站策划
  • 网站建设如何不被忽悠百度网盘客户端下载
  • 房产app平台有哪些唐山seo推广公司
  • 手机怎么做电子书下载网站全球新闻最新消息
  • 怎么样在百度做网站歌尔股份砍单
  • 青岛网站建设小公司百度在线使用网页版
  • 专业企业网站开发品牌广告和效果广告的区别
  • 郑州网站建设 论坛中国公关公司前十名
  • 无锡企业网站制作哪家好如何提高seo关键词排名
  • 环球资源的服务种类北京网站优化公司
  • 丽水企业网站开发企业网站排名靠前的方法
  • 中小企业建站系统电商平台开发