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

最佳实践-模板设计模式

目录

一、什么是设计模式

二、模板设计模式-介绍

三、模板设计模式-最佳实践

1、开发需求

2、使用传统的方法来解决

3、优化-使用模板设计模式来解决


一、什么是设计模式

1)设计模式是在大量的实践中总结和理论化之后优选的代码结构、编程风格、以及解决问题的思考方式

2)设计模式就像经典的棋谱,不同的棋局,我们用不同的棋谱,免去我们再思考和摸索

二、模板设计模式-介绍

1、基本介绍

抽象类体现的就是一种模板模式的设计,抽象类作为多个子类的通用模板,子类在抽象类的基础上进行扩展、改造,但子类总体上会保留抽象类的行为方式

2、模板设计模式能解决的问题

1)当功能内部一部分实现是确定的,一部分是不确定的,这时可以把不确定的部分暴露出去,让子类去实现

2)编写一个抽象父类,父类提供了多个子类的通用方法,并把一个或多个方法留给其子类实现,就是一种模板模式

三、模板设计模式-最佳实践

1、开发需求

1)有多个类,完成不同的任务job

2)要求统计得到各自完成任务的时间

3)请编程实现

2、使用传统的方法来解决

import time

class AA:
    def job(self):
        # 得到开始的时间,秒数
        start=time.time()
        num=0
        for i in range(1,800001):
            num+=i
        # 得到结束的时间,秒数
        end=time.time()
        print("计算任务执行时间(秒)",(end-start))

class BB:
    def job(self):
        # 得到开始的时间,秒数
        start=time.time()
        num=1
        for i in range(1,90001):
            num-=i
        # 得到结束的时间,秒数
        end=time.time()
        print("计算任务执行时间(秒)",(end-start))

# 测试
if __name__=='__main__':
    aa=AA()
    aa.job()
    bb=BB()
    bb.job()

3、优化-使用模板设计模式来解决

设计一个抽象基类(Template),能完成如下功能:

1)编写方法cal_time(),可以计算某段代码的耗时时间

2)编写抽象方法job()

3)编写一个子类,继承抽象类Template,并实现job方法

4)完成测试

import time
from abc import ABC, abstractmethod

# 抽象类-模板类
class Template(ABC):
    @abstractmethod
    def job(self):
        pass
    def cal_time(self):
        # 得到开始的时间,秒数
        start = time.time()
        self.job()
        # 得到结束的时间,秒数
        end = time.time()
        print("计算任务执行时间(秒)", (end - start))

class AA(Template):
    def job(self):
        num=0
        for i in range(1,800001):
            num+=i

class BB(Template):
    def job(self):
        num=1
        for i in range(1,90001):
            num-=i

# 测试
if __name__=='__main__':
    aa=AA()
    aa.cal_time()
    bb=BB()
    bb.cal_time()

 


http://www.kler.cn/a/300510.html

相关文章:

  • TTL 在 Redis 缓存中的作用
  • 医院挂号就诊系统设计与实现(代码+数据库+LW)
  • 2025年1月17日(点亮三色LED)
  • 快速搭建深度学习环境(Linux:miniconda+pytorch+jupyter notebook)
  • 港湾周评|万科的多重压力
  • RC2在线加密工具
  • 横版闯关手游【全明星时空阿拉德】Linux手工服务端+运营后台+双app端
  • git:认识git和基本操作(1)
  • 手写Promise
  • 《实现 HTML 图片轮播效果》
  • <<编码>> 第 5 章 绕过拐弯的通信(Seeing Around Corners) 示例电路
  • 深入浅出 Ansible 自动化运维:从入门到实战
  • C++ Primer Plus(速记版)-基本语言
  • 网络安全入门教程(非常详细)从零基础入门到精通
  • 多线程:java中的实现
  • flink中slotSharingGroup() 的详解
  • MySQL索引优化与B+树【后端 14】
  • GO 闭包
  • Python | Leetcode Python题解之第396题旋转函数
  • Docker启动Mysql镜像报错问题?
  • 研究: 用于训练大型语言模型的数据集往往缺乏透明度
  • 缓存击穿问题
  • (pandas读取DataFrame列报错)raise KeyError(key) from err KeyError: (‘name‘, ‘age‘)
  • 代码随想录算法训练营day18|二叉树06
  • electron有关mac构建
  • 搜索功能技术方案