Python

在讲桥接模式之前,先问一个问题:如果一个类有两个变化维度,你会怎么设计?很多人第一反应是——继承。但当继承层级开始”爆炸”时,桥接模式就该登场了。一、桥接模式解决什么问题?一句话:将抽象部分与实现部分分离,使它们可以独立变化。关键词:抽象(Abstraction)实现(Implementation)解耦组合替代继承二、一个典型的继承爆炸问题假设我们要设计一个”消息通知系统”。消息类型有:普通消息紧急消息发送渠道有:邮件短信微信很多人会这样写:classEmailNormalMessage:passclassEmailUrgentMessage:passclassSMSNormalMessage...
一、适配器模式解决什么问题?一句话:接口不兼容,但你又不能改原有代码。现实世界类比:国标插头插不进英标插座需要一个转换头软件世界中:老系统接口不能改第三方库接口格式不一致新旧系统并存这时就需要——适配器(Adapter)。二、定义将一个类的接口转换成客户端期望的另一个接口,使原本由于接口不兼容而不能一起工作的类可以一起工作。核心关键词:接口转换不修改原类让旧代码继续工作三、一个真实业务场景假设你原本系统中定义了统一支付接口:classPayment:defpay(self,amount):pass后来接入一个第三方支付SDK:classThirdPartyPay:defmake_payment...
在前几篇中,我们讨论的都是:如何创建对象如何复制对象如何构建复杂对象而对象池模式关注的是一个更现实的问题:对象创建太贵了,能不能不要频繁创建?这就是ObjectPool(对象池)存在的意义。一、什么是对象池模式?一句话定义:对象池模式通过维护一组可复用对象,避免频繁创建和销毁,从而提升性能。核心思想:预先创建一批对象使用时从池中取出用完后归还池中不重复创建二、什么时候需要对象池?对象池并不是”通用解法”,它只适合以下场景:1.对象创建成本高例如:数据库连接网络连接线程大型文件句柄GPU资源2.对象数量可控对象池通常会限制最大数量,否则会失控。三、最典型案例:数据库连接池想象一个Web服务:de...
在前面的几种创建型模式中(工厂、抽象工厂、建造者),我们解决的核心问题都是:“对象该怎么创建?”而原型模式关注的是另一件事:“对象已经很复杂了,能不能直接复制一个?”这就是Prototype(原型)模式要解决的问题。一、原型模式要解决什么问题?原型模式的核心思想一句话就够了:通过复制已有对象来创建新对象,而不是通过new或构造函数。它适合解决这类场景:对象创建成本很高(初始化复杂、耗时)对象结构复杂,构造参数多需要大量相似对象,只在少量属性上不同希望避免大量重复的初始化逻辑二、一个”很痛苦”的对象创建例子先看一个不使用原型模式的写法。classReport:def__init__(self):...
在前面几篇中,我们讨论的都是”创建哪一个对象”。但在实际开发中,你还会遇到另一类问题:对象是同一个,但构建过程非常复杂。这正是建造者模式要解决的核心场景。一、什么时候需要建造者模式先看一个常见例子:创建一个请求对象。request=HttpRequest(url="https://api.example.com",method="POST",headers={"Auth":"token"},params={&quot...
在上一篇中,我们用工厂方法模式解决了“如何创建某一种对象”的问题。但在真实项目中,你很快会遇到更复杂的情况:不是创建一个对象,而是创建“一整套相关对象”。这正是抽象工厂模式存在的原因。一、什么时候工厂方法不够用先看一个典型业务场景:系统需要支持多种支付渠道每种支付渠道,都包含:支付接口对账接口退款接口也就是说:对象之间存在“成组出现”的关系。如果仍然使用工厂方法:pay=PaymentFactory.create("wechat")refund=RefundFactory.create("wechat")recon=Reco...
在真实项目中,对象的创建往往比使用更复杂。如果你发现代码中频繁出现if-else或根据参数去new不同的类,那基本已经到了该用工厂方法模式的时候了。一、工厂方法模式解决什么问题先看一个非常常见的写法:defcreate_payment(pay_type):ifpay_type=="wechat":returnWeChatPay()elifpay_type=="alipay":returnAliPay()elifpay_type=="bank":returnBankPay()e...
单例模式是最常被提及、也最容易被误用的设计模式之一。在Python中,由于语言特性特殊,单例模式既简单,也容易踩坑。本篇我们重点解决三个问题:单例模式到底解决什么问题Python中有哪些实现方式哪些场景真的适合用单例一、什么是单例模式单例模式(Singleton)的定义很简单:保证一个类在系统中只有一个实例,并提供全局访问点。核心目标只有两个:控制实例数量:只能有一个提供统一访问入口二、为什么需要单例模式在实际项目中,以下对象往往只需要一个实例:配置中心日志对象数据库连接池缓存管理器全局状态管理器如果这些对象被反复创建,可能带来:资源浪费状态不一致隐蔽的逻辑Bug三、最“Python风格”的单...
在前面的几篇中,我们已经从理论上理解了设计模式、分类和重构思想。本篇将视角拉回到Python本身,看看在实际编写设计模式时,哪些内置工具和标准库最常被用到。掌握这些工具,能让你用更少的代码实现更清晰的设计模式。一、abc:抽象类的基石abc(AbstractBaseClass)是Python实现设计模式时最重要的基础工具之一。典型用途策略模式工厂模式模板方法模式示例:fromabcimportABC,abstractmethodclassPayment(ABC):@abstractmethoddefpay(self,amount):pass作用:强制子类实现指定方法明确“接口契约”提前暴露设计...
很多开发者第一次接触设计模式,都会有一个疑问:“我现在代码也能跑,为啥还要用设计模式?”答案往往出现在后期:当需求变化、代码膨胀、维护成本越来越高时,你会发现——重构,几乎不可避免。而设计模式,正是代码重构中最常用、最可靠的工具之一。一、什么是代码重构代码重构(Refactoring)指的是:在不改变代码外部行为的前提下,改善代码内部结构。它解决的问题包括:代码重复严重逻辑混乱、if-else满天飞类职责不清,一个类什么都干改一个需求,牵一大片代码重构不是“重写”,而是逐步演进式优化。二、没有设计模式的代码长什么样先看一个常见的“坏味道”示例:defpay(order,pay_type):if...