📜  模式代码 python (1)

📅  最后修改于: 2023-12-03 15:40:37.610000             🧑  作者: Mango

Python模式代码介绍

Python中的模式,也称为设计模式,可以被视为在解决问题时的可重复的代码模板。Python的模式让程序员可以更容易地理解代码,而且在重用代码时也非常实用。在本文中,我们将介绍一些主流的Python模式。

1. 单例模式

单例模式保证一个类只有一个实例,并提供了一个全局访问点。下面是一个简单的单例模式实现:

class Singleton:
    __instance = None
    
    @staticmethod 
    def getInstance():
        if Singleton.__instance == None:
            Singleton()
        return Singleton.__instance
    
    def __init__(self):
        if Singleton.__instance != None:
            raise Exception("This class is a singleton!")
        else:
            Singleton.__instance = self
 
s = Singleton()
print(s)
 
s = Singleton.getInstance()
print(s)
 
s = Singleton.getInstance()
print(s)
2. 工厂模式

工厂模式允许创建但抽象出对象的实例化过程。这种模式可以帮助我们根据需要动态创建对象。下面是一个工厂模式的示例:

class Dog:
    def __init__(self, name):
        self.name = name
 
    def speak(self):
        return "汪汪!"
 
class Cat:
    def __init__(self, name):
        self.name = name
 
    def speak(self):
        return "喵喵!"
 
def get_pet(pet="dog"):
    pets = dict(dog=Dog("旺财"), cat=Cat("汤姆"))
    return pets[pet]
 
d = get_pet("dog")
print(d.speak())
 
c = get_pet("cat")
print(c.speak())
3. 策略模式

策略模式允许我们根据不同的情况使用不同的算法或行为。下面是一个策略模式的示例:

class StrategyExample:
    def __init__(self, strategy):
        self.strategy = strategy
 
    def execute(self):
        self.strategy.execute()
 
class Strategy1:
    def execute(self):
        print("执行策略1")
 
class Strategy2:
    def execute(self):
        print("执行策略2")
 
s1 = Strategy1()
s2 = Strategy2()
 
se1 = StrategyExample(s1)
se2 = StrategyExample(s2)
 
se1.execute()
se2.execute()
4. 观察者模式

观察者模式定义了一种一对多的依赖关系,当对象的状态发生变化时,所有依赖于它的对象都会自动被通知并更新。下面是一个观察者模式的示例:

class Subscriber:
    def __init__(self, name):
        self.name = name
 
    def update(self, message):
        print("{0}, 收到消息:{1}".format(self.name, message))
 
class Publisher:
    def __init__(self):
        self.subscribers = set()
 
    def register(self, subscriber):
        self.subscribers.add(subscriber)
 
    def unregister(self, subscriber):
        self.subscribers.discard(subscriber)
 
    def notify_all(self, message):
        for subscriber in self.subscribers:
            subscriber.update(message)
 
p = Publisher()
 
s1 = Subscriber("网管")
s2 = Subscriber("小明")
 
p.register(s1)
p.register(s2)
 
p.notify_all("明天晚上开会")
 
p.unregister(s1)
 
p.notify_all("明天下午休息")
5. 装饰器模式

装饰器模式允许我们在不修改现有对象的情况下向它们添加新功能。下面是一个装饰器模式的示例:

class Component:
    def operation(self):
        pass
 
class ConcreteComponent(Component):
    def operation(self):
        return "基础组件"
 
class Decorator(Component):
    def __init__(self, component):
        self.component = component
 
    def operation(self):
        return self.component.operation()
 
class ConcreteDecoratorA(Decorator):
    def operation(self):
        return "特殊功能A高级装饰" + self.component.operation()
 
class ConcreteDecoratorB(Decorator):
    def operation(self):
        return "特殊功能B高级装饰" + self.component.operation()
 
c = ConcreteComponent()
d1 = ConcreteDecoratorA(c)
d2 = ConcreteDecoratorB(d1)
 
print(d2.operation())

这五个模式只是Python中可用的几个模式的代表,其他有趣的模式还包括适配器模式、模板模式和迭代器模式等。了解模式对Python的开发很有价值,可以帮助你编写更优雅、更可读、更可维护的代码。