01. 创建型模式
创建型模式关注对象的创建机制,试图以适合情况的方式创建对象。
单例模式(Singleton):确保一个类只有一个实例,并提供全局访问点。应用场景:数据库连接池、日志记录器、配置管理器。
工厂模式(Factory):定义创建对象的接口,让子类决定实例化哪个类。应用场景:根据配置创建不同类型的对象。
python
# 单例模式
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
cls._instance._initialized = False
return cls._instance
def __init__(self):
if self._initialized:
return
self._initialized = True
self.connection = "数据库连接已建立"
# 工厂模式
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
return "汪汪!"
class Cat(Animal):
def speak(self):
return "喵喵!"
class AnimalFactory:
@staticmethod
def create_animal(animal_type):
if animal_type == "dog":
return Dog()
elif animal_type == "cat":
return Cat()
raise ValueError(f"未知动物类型: {animal_type}")
# 使用
dog = AnimalFactory.create_animal("dog")
print(dog.speak()) # 汪汪!02. 行为型模式
行为型模式关注对象之间的通信和职责分配。
观察者模式(Observer):定义对象间的一对多依赖关系,当一个对象状态改变时,所有依赖它的对象都会收到通知。应用场景:事件系统、消息订阅、数据绑定。
策略模式(Strategy):定义一系列算法,将每个算法封装起来,使它们可以互换。应用场景:排序算法切换、支付方式选择、验证规则。
python
# 观察者模式
class EventEmitter:
def __init__(self):
self._listeners = {}
def on(self, event, callback):
if event not in self._listeners:
self._listeners[event] = []
self._listeners[event].append(callback)
def emit(self, event, *args):
if event in self._listeners:
for callback in self._listeners[event]:
callback(*args)
# 使用
emitter = EventEmitter()
emitter.on("data", lambda data: print(f"收到数据: {data}"))
emitter.on("data", lambda data: print(f"处理数据: {data.upper()}"))
emitter.emit("data", "hello world")
# 策略模式
class SortStrategy:
def sort(self, data):
pass
class BubbleSort(SortStrategy):
def sort(self, data):
arr = data.copy()
n = len(arr)
for i in range(n):
for j in range(0, n-i-1):
if arr[j] > arr[j+1]:
arr[j], arr[j+1] = arr[j+1], arr[j]
return arr
class QuickSort(SortStrategy):
def sort(self, data):
if len(data) <= 1:
return data
pivot = data[len(data) // 2]
left = [x for x in data if x < pivot]
middle = [x for x in data if x == pivot]
right = [x for x in data if x > pivot]
return self.sort(left) + middle + self.sort(right)
class Sorter:
def __init__(self, strategy: SortStrategy):
self._strategy = strategy
def sort(self, data):
return self._strategy.sort(data)
sorter = Sorter(BubbleSort())
print(sorter.sort([3, 1, 4, 1, 5, 9, 2, 6]))知识测验
第 1/5 题正确 0
单例模式的目的是什么?
下一节
下一节 正则表达式深入