3.6
工厂模式与单例模式
- 工厂模式(Factory Pattern)
用于解耦对象创建和使用,适用于对象创建逻辑复杂的场景。
代码示例:简单工厂模式生成报表
python
运行
class ReportFactory:
@staticmethod
def create_report(report_type):
if report_type == "pdf":
return PDFGenerator()
elif report_type == "excel":
return ExcelGenerator()
else:
raise ValueError("不支持的报表类型")
使用工厂创建对象
generator = ReportFactory.create_report("excel")
generator.generate(data)
2. 单例模式(Singleton Pattern)
确保一个类只有一个实例,适用于全局配置、日志记录等场景。
代码示例:线程安全的单例模式(Python)
python
运行
import threading
class SingletonLogger:
_instance = None
_lock = threading.Lock()
def __new__(cls):
if not cls._instance:
with cls._lock:
if not cls._instance:
cls._instance = super().__new__(cls)
cls._instance.log_file = open("app.log", "a")
return cls._instance
def log(self, message):
self.log_file.write(f"{message}\n")
self.log_file.flush()
使用示例
logger1 = SingletonLogger()
logger2 = SingletonLogger()
logger1.log("第一条日志")
logger2.log("第二条日志") # 与logger1是同一个实例
- 设计模式选择原则
优先使用简单模式,避免过度设计
从实际需求中提炼模式,而非为用模式而用
浙公网安备 33010602011771号