2025-02-19 15:02阅读: 4评论: 0推荐: 0

python设计模式

在 Python 中,设计模式是一种解决软件设计中常见问题的通用方法。设计模式并不是代码的具体实现,而是给出了一种结构或方法,帮助开发人员以最佳的方式解决问题。Python 中的设计模式与其他编程语言中的设计模式基本相同,但由于 Python 本身的特性(如动态类型、简洁的语法和强大的标准库),许多设计模式在 Python 中的实现会显得更简洁和灵活。

常见的设计模式可以分为三类:

  1. 创建型设计模式(Creational Patterns):关注对象的创建方式,避免硬编码创建逻辑。
  2. 结构型设计模式(Structural Patterns):关注类和对象的组合方式,如何将对象和类组织成更复杂的结构。
  3. 行为型设计模式(Behavioral Patterns):关注对象之间的交互与职责分配。

1. 创建型设计模式

创建型设计模式主要解决对象创建的问题,常见的设计模式包括:

单例模式(Singleton Pattern)

确保一个类只有一个实例,并提供全局访问点。

class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
# 测试
s1 = Singleton()
s2 = Singleton()
print(s1 is s2) # 输出 True,证明 s1 和 s2 是同一个实例

工厂方法模式(Factory Method Pattern)

通过工厂方法来创建对象,而不是直接调用构造函数。这样做可以更灵活地控制对象的创建。

class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
class AnimalFactory:
def create_animal(self, animal_type):
if animal_type == 'dog':
return Dog()
elif animal_type == 'cat':
return Cat()
# 测试
factory = AnimalFactory()
dog = factory.create_animal('dog')
cat = factory.create_animal('cat')
print(dog.speak()) # Woof!
print(cat.speak()) # Meow!

抽象工厂模式(Abstract Factory Pattern)

提供一个接口,用于创建一组相关或相互依赖的对象,而无需指定它们的具体类。

class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "Woof!"
class Cat(Animal):
def speak(self):
return "Meow!"
class AbstractFactory:
def create_animal(self):
pass
class DogFactory(AbstractFactory):
def create_animal(self):
return Dog()
class CatFactory(AbstractFactory):
def create_animal(self):
return Cat()
# 测试
dog_factory = DogFactory()
cat_factory = CatFactory()
dog = dog_factory.create_animal()
cat = cat_factory.create_animal()
print(dog.speak()) # Woof!
print(cat.speak()) # Meow!

2. 结构型设计模式

结构型设计模式主要关注如何组织和组合类与对象。常见的设计模式包括:

适配器模式(Adapter Pattern)

将一个类的接口转换成客户端希望的另一种接口,使得原本由于接口不兼容而无法一起工作的类可以一起工作。

class EuropeanSocketInterface:
def voltage(self):
return 230
class AmericanSocketInterface:
def voltage(self):
return 120
class Adapter(EuropeanSocketInterface):
def __init__(self, american_socket):
self.american_socket = american_socket
def voltage(self):
return self.american_socket.voltage()
# 测试
american_socket = AmericanSocketInterface()
adapter = Adapter(american_socket)
print(adapter.voltage()) # 输出 120

装饰器模式(Decorator Pattern)

动态地为对象添加额外的职责和功能,而不改变原始对象的代码。

class Coffee:
def cost(self):
return 5
class MilkDecorator:
def __init__(self, coffee):
self._coffee = coffee
def cost(self):
return self._coffee.cost() + 2
class SugarDecorator:
def __init__(self, coffee):
self._coffee = coffee
def cost(self):
return self._coffee.cost() + 1
# 测试
coffee = Coffee()
milk_coffee = MilkDecorator(coffee)
sugar_milk_coffee = SugarDecorator(milk_coffee)
print(coffee.cost()) # 输出 5
print(milk_coffee.cost()) # 输出 7
print(sugar_milk_coffee.cost()) # 输出 8

3. 行为型设计模式

行为型设计模式主要关注对象之间的交互和职责分配,常见的设计模式包括:

策略模式(Strategy Pattern)

定义一系列算法,将每个算法封装起来,并让它们可以互换。

class Strategy:
def execute(self, a, b):
pass
class AddStrategy(Strategy):
def execute(self, a, b):
return a + b
class SubtractStrategy(Strategy):
def execute(self, a, b):
return a - b
class Calculator:
def __init__(self, strategy: Strategy):
self._strategy = strategy
def set_strategy(self, strategy: Strategy):
self._strategy = strategy
def calculate(self, a, b):
return self._strategy.execute(a, b)
# 测试
calc = Calculator(AddStrategy())
print(calc.calculate(5, 3)) # 输出 8
calc.set_strategy(SubtractStrategy())
print(calc.calculate(5, 3)) # 输出 2

观察者模式(Observer Pattern)

定义对象间的一种一对多依赖关系,使得每当一个对象改变状态时,所有依赖于它的对象都会收到通知并自动更新。

class Subject:
def __init__(self):
self._observers = []
def add_observer(self, observer):
self._observers.append(observer)
def notify_observers(self):
for observer in self._observers:
observer.update()
class Observer:
def update(self):
pass
class ConcreteObserver(Observer):
def update(self):
print("Observer updated!")
# 测试
subject = Subject()
observer1 = ConcreteObserver()
subject.add_observer(observer1)
subject.notify_observers() # 输出 Observer updated!

总结

设计模式在 Python 中也具有重要作用,它们能够提高代码的灵活性、可复用性和可维护性。Python 的一些特性(如动态类型、内省、装饰器等)使得许多设计模式的实现比其他语言更加简洁和易于理解。在实际开发中,根据问题的复杂度选择合适的设计模式,可以帮助我们更好地组织代码,减少重复工作,提高开发效率。

本文作者:清澈的澈

本文链接:https://www.cnblogs.com/lmc7/p/18724129

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   清澈的澈  阅读(4)  评论(0编辑  收藏  举报
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示