Python Design Patterns: Writing Cleaner and More Maintainable Code

Design patterns are reusable solutions to common software design problems. This guide covers essential Python patterns.

## Singleton
```python
class Singleton:
   _instance = None
   def __new__(cls):
       if cls._instance is None:
           cls._instance = super().__new__(cls)
       return cls._instance
```

## Factory
```python
class Dog:
   def speak(self): return "Woof!"

class Cat:
   def speak(self): return "Meow!"

def create_pet(pet_type):
   pets = {"dog": Dog, "cat": Cat}
   return pets.get(pet_type)()
```

## Observer
```python
class EventEmitter:
   def __init__(self):
       self._listeners = {}
   def on(self, event, callback):
       self._listeners.setdefault(event, []).append(callback)
   def emit(self, event, *args):
       for cb in self._listeners.get(event, []):
           cb(*args)
```

## Decorator Pattern
```python
import functools
import time

def timer(func):
   @functools.wraps(func)
   def wrapper(*args, **kwargs):
       start = time.time()
       result = func(*args, **kwargs)
       print(f"{func.__name__}: {time.time()-start:.2f}s")
       return result
   return wrapper

@timer
def slow_function():
   time.sleep(1)
```

## Strategy
```python
class SortStrategy:
   def sort(self, data): pass

class BubbleSort(SortStrategy):
   def sort(self, data): return sorted(data)

class Context:
   def __init__(self, strategy):
       self._strategy = strategy
   def execute(self, data):
       return self._strategy.sort(data)
```

## Conclusion

Patterns improve code organization. Use them when they solve real problems, not just for the sake of using them.

评论
暂无评论