📅  最后修改于: 2023-12-03 15:40:37.610000             🧑  作者: Mango
Python中的模式,也称为设计模式,可以被视为在解决问题时的可重复的代码模板。Python的模式让程序员可以更容易地理解代码,而且在重用代码时也非常实用。在本文中,我们将介绍一些主流的Python模式。
单例模式保证一个类只有一个实例,并提供了一个全局访问点。下面是一个简单的单例模式实现:
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)
工厂模式允许创建但抽象出对象的实例化过程。这种模式可以帮助我们根据需要动态创建对象。下面是一个工厂模式的示例:
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())
策略模式允许我们根据不同的情况使用不同的算法或行为。下面是一个策略模式的示例:
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()
观察者模式定义了一种一对多的依赖关系,当对象的状态发生变化时,所有依赖于它的对象都会自动被通知并更新。下面是一个观察者模式的示例:
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("明天下午休息")
装饰器模式允许我们在不修改现有对象的情况下向它们添加新功能。下面是一个装饰器模式的示例:
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的开发很有价值,可以帮助你编写更优雅、更可读、更可维护的代码。