page contents

Python常用的6个设计模式,效率直接翻倍!

很多同学一听到 “设计模式” 这三个字,就觉得头大,好像是写给架构师或者高级程序员看的东西。其实不然,设计模式就是一些 常见的代码套路,用来解决开发中经常遇到的问题。今天我们就来聊聊 Python里最常用的几个设计模式

attachments-2025-08-H2sx7OnK68ae60c000252.jpg

很多同学一听到 “设计模式” 这三个字,就觉得头大,好像是写给架构师或者高级程序员看的东西。其实不然,设计模式就是一些 常见的代码套路,用来解决开发中经常遇到的问题。今天我们就来聊聊 Python里最常用的几个设计模式

1. 单例模式(Singleton)

适用场景:全局只能有一个对象,比如日志记录器、数据库连接池、配置对象。就好比家里只有一个路由器,大家都得连它,不能每个人自己开一个。

class Singleton:

    _instance = None


    def __new__(cls, *args, **kwargs):

        if not cls._instance:

            cls._instance = super().__new__(cls)

        return cls._instance


# 测试

a = Singleton()

b = Singleton()

print(a is b)  # True,两个变量指向同一个对象

2. 工厂模式(Factory)

适用场景:当你需要根据条件来“生产”不同类型的对象时。就像点外卖,你告诉店家要“汉堡”还是“炸鸡”,工厂就给你对应的对象。

class Dog:

    defspeak(self):

        return"汪汪"


classCat:

    defspeak(self):

        return"喵喵"


defanimal_factory(animal_type):

    if animal_type == "dog":

        return Dog()

    elif animal_type == "cat":

        return Cat()

    else:

        raise ValueError("未知动物")


# 测试

pet = animal_factory("dog")

print(pet.speak())  # 汪汪

3. 装饰器模式(Decorator)

适用场景:不改变原来函数的情况下,给它增加新功能。这就像给咖啡加奶泡和糖,咖啡本身没变,只是加了“新体验”。

def logger(func):

    def wrapper(*args, **kwargs):

        print(f"调用函数:{func.__name__}")

        return func(*args, **kwargs)

    return wrapper


@logger

def say_hello(name):

    print(f"你好,{name}")


say_hello("小明")

4. 观察者模式(Observer)

适用场景:一个对象状态改变,其他对象也要自动收到通知。比如:微信公众号推送消息,关注的读者都会同时收到。

class Subscriber:

    defupdate(self, msg):

        print(f"收到消息:{msg}")


classPublisher:

    def__init__(self):

        self.subscribers = []


    defattach(self, subscriber):

        self.subscribers.append(subscriber)


    defnotify(self, msg):

        for sub inself.subscribers:

            sub.update(msg)


# 测试

pub = Publisher()

pub.attach(Subscriber())

pub.attach(Subscriber())

pub.notify("Python设计模式更新啦!")

5. 策略模式(Strategy)

适用场景:定义一组算法,把它们封装起来,随时可以互换。

比如支付方式:微信支付、支付宝支付、银行卡支付,本质上是不同的“策略”。

class WechatPay:

    defpay(self, amount):

        print(f"用微信支付 {amount} 元")


classAlipay:

    defpay(self, amount):

        print(f"用支付宝支付 {amount} 元")


classPayment:

    def__init__(self, strategy):

        self.strategy = strategy


    defpay(self, amount):

        self.strategy.pay(amount)


# 测试

p = Payment(WechatPay())

p.pay(100)


p = Payment(Alipay())

p.pay(200)

6. 适配器模式(Adapter)

适用场景:让原本不兼容的接口能一起工作。比如:你买了一个港版电器,在国内使用,就需要另外购买一个“转换插头”才能正常使用

class OldPrinter:

    defprint_old(self):

        print("老式打印机:只能黑白打印")


classAdapter:

    def__init__(self, old_printer):

        self.old_printer = old_printer


    defprint(self):

        self.old_printer.print_old()


# 测试

old = OldPrinter()

new = Adapter(old)

new.print()

总结

设计模式其实并不高大上,它们就是总结出来的 “写代码套路”。

• 单例模式 —— 全局只有一个实例

• 工厂模式 —— 统一生产对象

• 装饰器模式 —— 给函数加功能

• 观察者模式 —— 消息广播机制

• 策略模式 —— 灵活切换算法

• 适配器模式 —— 解决接口不兼容

学会这些模式,你写代码就会更清晰、更有条理。

更多相关技术内容咨询欢迎前往并持续关注好学星城论坛了解详情。

想高效系统的学习Python编程语言,推荐大家关注一个微信公众号:Python编程学习圈。每天分享行业资讯、技术干货供大家阅读,关注即可免费领取整套Python入门到进阶的学习资料以及教程,感兴趣的小伙伴赶紧行动起来吧。

attachments-2022-05-rLS4AIF8628ee5f3b7e12.jpg

你可能感兴趣的文章

相关问题

0 条评论

请先 登录 后评论
小柒
小柒

2172 篇文章

作家榜 »

  1. 轩辕小不懂 2403 文章
  2. 小柒 2172 文章
  3. Pack 1335 文章
  4. Nen 576 文章
  5. 王昭君 209 文章
  6. 文双 71 文章
  7. 小威 64 文章
  8. Cara 36 文章