
python设计模式
kobe_OKOK_
Python爱好者 曼巴精神践行者
展开
-
C+Java+Python实现最难排序算法-<堆排序>(通俗易懂)
li2 = [i for i in range(20)]import randomrandom.shuffle(li2)def create_heap(li,top,tail): for i in range(top, tail): # 遍历整个列表,给每个元素找位置,从第二个元素开始,第一个元素暂时保持 while i > 0: if li[i] > li[(i - 1) // 2]: li[...原创 2021-10-24 10:54:49 · 401 阅读 · 0 评论 -
<Python元类剖析>
文章目录1 Python创建对象1.1 Python层面创建对象1.2 C源码层面创建对象2 元类2.1 Python层面类如何被创建2.2 给类加”装饰器“1 Python创建对象1.1 Python层面创建对象"""测试1"""class Test1(object): def __new__(cls, *args, **kwargs): print(f"__new__方法被调用了") return object.__new__(cls) t1 = T原创 2021-09-23 17:40:01 · 109 阅读 · 0 评论 -
<Python设计模式>-汇总篇
设计模式是对软件中普遍存在(重复出现)的各种问题,所提出的解决方案。使用设计模式可以让软件工程地基更加牢固面向对象设计原则(SOLID):开放封闭原则如果你的项目需要增加功能,能够不修改既有的代码或者少修改既有的代码里氏替换原则如果一个函数的参数是父类对象,那么也应该支持传入其子类依赖倒置原则高层模块不应该依赖底层模块,二者都应该依赖抽象接口,抽象不应该依赖细节,细节应该依赖抽象,针对接口编程,不是针对实现编程接口隔离原则使用多个专用的接口,而不使用单一的总接口,客户端不原创 2021-08-31 14:05:59 · 155 阅读 · 0 评论 -
<Python设计模式>-模板方法模式
文章目录1 概述2 代码实现1 概述定义了一个操作中算法的骨架,将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤角色抽象类:定义抽象的原子操作:实现一个模板方法做为算法的骨架具体类:实现原子操作优点一次性实现一个算法不变的部分控制子类的扩展,不是所有的子类能够继承于接口类各个子类的公共行为应该被提取出来并集中到一个公共父类中以避免代码重复2 代码实现from abc import ABCMeta,abstractmethodfro原创 2021-08-31 13:58:41 · 180 阅读 · 0 评论 -
<Python设计模式>-策略模式
文章目录1 概述2 代码实现1 概述定义一系列算法,把它们一个个封装起来,并且使他们可相互替换,本模式使得算法可独立于使用他的客户端而变化角色抽象策略具体策略上下文优点定义了一系列可重用的算法和行为消除了一些条件语句可以提供相同行为的不同实现缺点客户必须了解不同的策略2 代码实现from abc import ABCMeta,abstractmethodclass Strategy(metaclass=ABCMeta): @abstractm原创 2021-08-31 13:41:13 · 151 阅读 · 0 评论 -
<Python设计模式>-责任链模式
文章目录1 概述2 代码实现1 概述使多个对象有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象链成一条链,并沿着这条链传递该请求,直至有一个对象处理它为止生活中的实例:公司员工请假的处理流程:如果请假小于等于三天,可以找项目经理请假请假小于等于五天,可以找部门经理请假请假小于等于十天,可以找总经理请假对于请假这个类,定义一个处理器请假的接口类,总经理,部门经理和项目经理都要继承这个接口,在运行时决定哪个类处理这个请求角色抽象处理者具体处理者客户端优势原创 2021-08-31 13:26:31 · 231 阅读 · 0 评论 -
<Python设计模式>-外观模式
文章目录1 概述2 代码实现1 概述为子系统中的一组接口提供一个一致的界面,外观模式定义了一个缩小了底层代码与高层代码的耦合角色外观 computer子系统类 CPU/Disk/Memory优点减少系统的相互依赖提高了灵活性提高了安全性2 代码实现class CPU: def run(self): print('CPU 开始运行') def stop(self): print('CPU 停止运行')class原创 2021-08-31 13:00:16 · 135 阅读 · 0 评论 -
<Python设计模式>-组合模式
文章目录1 概述2 代码实现1 概述把对象组合成树形结构比表示出层次结构,组合模式使得高层代码对单个对象和组合对象的使用具有一致性。角色抽象组件叶子组件复合组件客户端PPT中的两个简单的图形可以组合成一个复杂的组合图形,组合图形还可以于另外一个简单图形再次组合成一个复杂图形,对于用户组合图形与单一图形都具有相同的方法,比如复制粘贴,对齐等等适用场景表示对象的”部分-整体“层次结构用户忽略组合对象与单个对象的不同,用户可以统一使用组合结构中的所有对象定义了基本对象和组合原创 2021-08-31 10:40:21 · 186 阅读 · 0 评论 -
<Python设计模式>-桥模式
文章目录1 概述2 代码实现1 概述将一个事物的两个维度分离,使其可以独立地变化一个图形的形状和一个图形的颜色,形状和颜色是两个不同的维度角色抽象细化抽象实现者具体实现者使用场景抽象和实现相分离优秀的扩展能力2 代码实现from abc import ABCMeta, abstractmethodclass Shape(metaclass=ABCMeta): def __init__(self, color): self.color=原创 2021-08-31 10:12:47 · 265 阅读 · 0 评论 -
<Python设计模式>-适配器模式
文章目录1 概述2 代码实现2.1 一个类不符合接口2.2 多个类不符合接口1 概述适配器是结构型模式的一种,结构型模式主要控制几个类组成什么结构。VGA->HDMIType-C->micro本来不同的接口可以通过适配器进行链接角色目标接口 Payment待适配的类 BankPay、ApplePay适配器 NewBankPay PaymentAdapter场景想使用一个已经实现的类,但是接口不符合你的要求对象适配器,使用组合的方式,将已经实现的类的对象传给对象原创 2021-08-31 09:48:46 · 214 阅读 · 0 评论 -
<Python设计模式>-代理模式
文章目录1 概述2 代码实现3 优势&劣势1 概述为其他对象提供一种代理以控制对这个对象的访问租客通过找中介租房子,中介就是房东的一个代理,中介有权利带客户看房子,但是中介不允许做房东给他赋予权限之后的事情,否则就是违法的。代理模型常用模式有:远程代理,为远程对象提供代理保护代理,保护原始对象,用于对象有不同的访问形式虚代理,对于一个很大的对象提供一个虚代理,比如浏览器的无图模式,开启后看不到图片,当点击后发起网络请求拿到图片角色抽象实体实体代理2 代码实现虚代理 根原创 2021-08-21 23:13:17 · 243 阅读 · 0 评论 -
<Python设计模式>-建造者模式
文章目录1 概述2 代码实现3 优势&劣势1 概述建造者模式也是一种管理一套对象的设计模式。类似抽象工厂模式,但是也有不同。建造者模式着重描述一步步构造一个复杂对象,而抽象工厂模式着重于多个系列的产品对象举个例子,盖房子的流程是地基,垒墙,封顶,装饰角色抽象建造者:定义抽象类具体建造者:定义具体建造者类指挥者:导演类,在里面封装构建产品的过程产品 : 要建造的产品类2 代码实现from abc import ABCMeta,abstractmethodclass Hou原创 2021-08-18 23:28:47 · 187 阅读 · 0 评论 -
<Python设计模式>-抽象工厂模式
文章目录1 概述2 代码实现3 优势&劣势1 概述定义一个工厂类接口,让工厂子类来创建一系列相关或者相互依赖的对象场景一:生产一辆汽车,需要发动机,变速箱,底盘,车厢,不同的车型有不同的发动机,不同的变速箱,不同的底盘和不同的车厢。相比工厂方法模式,抽象工厂模式生产的是一套对象,工厂方法模式生产的是一个对象,可以给这一套对象加限制角色抽象工厂角色:造车工厂类,约束了一个工厂由几个对象创造而来具体工厂角色:创造不同的车使用不同的具体工厂抽象产品角色:抽象发动机类和抽象变速箱类具体原创 2021-08-18 23:04:06 · 538 阅读 · 0 评论 -
<Python设计模式>-工厂方法模式
文章目录1 概述2 代码实现3 优势&缺点1 概述工厂方法模式是简单工厂模式进化而来的,简单工厂模式在一个创建方法中创建了多个对象,当需要增加新“产品”的时候,需要修改工厂类的工厂方法。工厂方法模式将简单工厂模式中的创造方法拆开,让一个工厂方法只创造一个对象。角色抽象工厂角色:PaymentFactory具体工厂角色:抽象产品角色:具体产品角色:Payment2 代码实现from abc import ABCMeta, abstractmethodclass Paymen原创 2021-08-18 22:19:43 · 180 阅读 · 0 评论 -
<Python设计模式>-简单工厂模式
文章目录1 概述2 代码实现3 优势/劣势1 概述简单工厂模式是一种创造型模式。不直接向高层代码暴露对象创建的实现细节,通过工厂类来负责创建产品类实例。角色工厂角色 (Creator)抽象产品角色 (Product)具体产品角色(Concrete Product)2 代码实现from abc import ABCMeta, abstractmethodclass Payment(metaclass=ABCMeta): """ 抽象类 定义统一接口类型 ""原创 2021-08-17 21:30:59 · 198 阅读 · 0 评论 -
<Python设计模式>-单例模式
文章目录1 概述2 代码实现3 使用场景1 概述顾名思义,单例模式(singleton)就是一个类只有一个实例。保证一个类只有一个实例,并提供一个访问它的全局访问点。优点对唯一实例的受控访问单例相当于全局变量,防止了命名空间被污染2 代码实现方式一class Singleton: def __new__(cls, *args, **kwargs): """ 实例化一个对象,开辟一块空间存储这块对象 """ i原创 2021-08-17 21:07:19 · 173 阅读 · 0 评论 -
<Python设计模式>-接口
文章目录1 概述2 代码实现1 概述Python 没有明确给出接口的概念,但是可以用类的方式实现2 代码实现方式一class Base: """ 抽象类 定义两个接口,如子类不实现会报出NotImplementedError """ def get(self): raise NotImplementedError def set(self,val): raise NotImplementedErrorclass A原创 2021-08-16 22:07:20 · 317 阅读 · 0 评论 -
<Python设计模式>-观察者模式
文章目录1 概述2 代码实现3 适用场景4 优势1 概述观察者模式,也叫发布-订阅模式,是常用也是比较重要的一种设计模式。对象间的一对多的依赖关系。例子1:公众号是发布者,关注公众号的用户是订阅者,一个公众号可以被多个微信用户订阅,公众号(一方)对于订阅者(多方),这就是一个一对多的对象映射关系。发布者的消息更新之后,所有的订阅者都会收到消息。订阅者就是观察者例子2:excel的数据可以生成不同的图表,柱状图,饼状图,折线图,这些图表是订阅者。数据是发布者。当数据发生变化的时候,图表也会发生变化原创 2021-08-16 21:52:19 · 323 阅读 · 0 评论