PyPattyrn-一个简单而有效的python库,用于实现常见的设计模式

PyPattyrn是一个python软件包,旨在使您更轻松,更快地将设计模式实现到您自己的项目中。

设计模式本质上不能直接转换为代码,因为它们只是对如何解决特定问题的描述。但是,许多常见的设计模式都具有在该模式的所有实现中通用的样板代码。该程序包捕获了该通用代码并使其易于使用,因此您不必在所有项目中都自己编写它。

设计模式

在软件工程中, 设计模式是解决软件设计中常见问题的通用可重复解决方案。设计模式不是可以直接转换为代码的最终设计。它是关于如何解决可以在许多不同情况下使用的问题的描述或模板。

设计模式的用途

设计模式可以通过提供经过测试的,成熟的开发范例来加快开发过程。有效的软件设计需要考虑可能直到实施稍后才能看到的问题。重用设计模式有助于防止可能引起重大问题的细微问题,并提高熟悉模式的编码人员和架构师的代码可读性。

通常,人们只了解如何将某些软件设计技术应用于某些问题。这些技术很难应用于更广泛的问题。设计模式提供了通用的解决方案,以不需要特定细节的格式记录下来。

另外,模式允许开发人员使用众所周知的,易于理解的名称进行软件交互。常见的设计模式可以随着时间的流逝而得到改进,使其比临时设计更健壮。

PyPattyrn代码示例

责任链模式

沿对象链传递请求,直到处理该请求。

from pypattyrn.behavioral.chain import Chain, ChainLinkclass ConcreteChainLinkThree(ChainLink): # This object is a ChainLink    def handle(self, request): # Implement the handle method.        if request == 'handle_three':            return "Handled in chain link three"        else:            return self.successor_handle(request) # If this ChainLink can't handle the request,                                                   # ask its successor to handle it.                                                   # (Has no successor so will raise AttributeError)                                                  # (This exception is caught and will call a Chains fail method)class ConcreteChainLinkTwo(ChainLink): # This object is a ChainLink    def __init__(self): # Override init to set a successor on initialization.        super().__init__() # first call ChainLinks init        self.set_successor(ConcreteChainLinkThree()) # Set the successor of this chain link                                                      # to a ConcreteChainLinkThree instance.
def handle(self, request): # Implement the handle method.        if request == 'handle_two':            return "Handled in chain link two"        else:            return self.successor_handle(request) # If this ChainLink can't handle a request                                                   # ask its successor to handle it                                                   # (the ConcreteChainLinkThree instance).class ConcreteChainLinkOne(ChainLink): # This object is a ChainLink    def __init__(self):         super().__init__()        self.set_successor(ConcreteChainLinkTwo()) # Set the successor of this ChainLink                                                   # to a ConcreteChainLinkTwo instance.    def handle(self, request): # Implement the handle method.        if request == 'handle_one':            return "Handled in chain link one"        else:            return self.successor_handle(request) # If this ChainLink can't handle a request                                                   # ask its successor to handle it                                                   # (the ConcreteChainLinkTwo instance).class ConcreteChain(Chain): # This object is a Chain    def __init__(self): # Override init to initialize a Chain with the starting chain link.        super().__init__(ConcreteChainLinkOne()) # Initialize this Chain with a start chain link.                                                 # (a ConcreteChainLinkOne instance)    def fail(self): # Implement the fail method, this is called if no chain links could handle a request.        return 'Fail'chain = ConcreteChain()assert "Handled in chain link one" == chain.handle("handle_one")assert "Handled in chain link two" == chain.handle("handle_two")assert "Handled in chain link three" == chain.handle("handle_three")assert "Fail" == chain.handle('handle_four')

PyPattyrn安装

pip install pypattyrn 或者下载pypattyrn的网盘备份版本

(0)

相关推荐

  • 设计模式(13) 职责链模式

    行为型模式 行为型模式关注于应用运行过程中算法的提供和通信关系的梳理. 相比于创建型模式和结构型模式,行为型模式包含了最多的设计模式种类,包括: 职责链模式 模板方法模式 解释器模式 命令模式 迭代器 ...

  • 2.7万 Star!最全面的 Python 设计模式集合

    [导语]:设计模式是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易地被他人理解.保证代码可靠性.python-patterns 则是使用 ...

  • 设计模式——把类作为参数的抽象工厂模式

    今天给大家介绍一个非常简单的设计模式,一学就会,非常好用. 这个模式叫做抽象工厂模式,大家可能对工厂模式比较熟悉,在工厂模式当中封装了实例的创建逻辑.主要的用途一般是将一些复杂的类的创建过程整合在一起 ...

  • 聊聊 Python 面试最常被问到的几种设计模式(下)

    聊聊 Python 面试最常被问到的几种设计模式(下)

  • PHP设计模式之责任链模式

    PHP设计模式之责任链模式 责任链模式,属于对象行为型的设计模式. Gof类图及解释 GoF定义:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这些对象连成一条链,并沿着这 ...

  • Python单例模式(Singleton)的N种实现

    很多初学者喜欢用全局变量,因为这比函数的参数传来传去更容易让人理解.确实在很多场景下用全局变量很方便.不过如果代码规模增大,并且有多个文件的时候,全局变量就会变得比较混乱.你可能不知道在哪个文件中定义 ...

  • 一个超好用的Python库:itertools

    大家好,我是黄同学

  • tqdm-让您的循环显示一个智能进度条的python库

    tqdm源自阿拉伯语taqaddum(تقدّم),意为"进步",是西班牙语中的"我非常爱你"的缩写(te quiero demasiado). 立即让您的循环 ...

  • 1.7 万 Star!一个简单实用的 Python 进度条库

    小白带你学编程 昨天 来源:Python开发者 [导读]:有的 Python 程序较大,执行需要花费较长的时间,有的用户在"盲目"地等待运行结果,但又不能明确知道程序进展到什么程度 ...

  • 一个非常好用的 Python 魔法库

    重磅干货,第一时间送达 本文转自:视学算法 来源:Be_melting https://blog.csdn.net/lys_828/article/details/106489371 1. 前言 在处 ...

  • 用Python做一个简单的翻译工具

    编程本身是跟年龄无关的一件事,不论你现在是十四五岁,还是四五十岁,如果你热爱它,并且愿意持续投入其中,必定会有所收获. 本文就来自编程教室一位"小"读者的投稿(互助学习1群里的同学 ...

  • 用python写一个简单的贪吃蛇游戏

    不知道有多少同学跟我一样,最初接触编程的动机就是为了自己做个游戏玩? Python 虽然并不是一个"为游戏而生"的语言,但也有着自己的游戏引擎.最常用的就是 pygame.另外还有 ...

  • 用 Python 实现一个简单的微信红包算法

    这里我给一个简单的实现方案. 基本思路就是,有多少个红包,就循环多少次,每一次,在剩下的钱里面随机出一个值作为这个红包的金额,然后把金额从总金额中扣除.这里要注意,需要保证每个人至少能拿得到 1 分钱 ...

  • 5.6k Star,一个简单易用的视频游戏编程库

    一.软件介绍 raylib 是一个开源的.简单且易于使用的视频游戏编程库,由 raysan5 开发并维护. raylib 受到 Borland BGI 图形库和 XNA 框架的极大启发,特别适用于原型 ...

  • pydub-使用简单易用的高级界面处理音频的python库

    pydub是一个简单易用的,用于处理音频的python库. 快速开始 打开一个WAV文件: from pydub import AudioSegmentsong = AudioSegment.from ...