Files
BZJZ_Material/文档润色流和知识库构建流/claude-scholar/skills/architecture-design/references/factory_pattern.md
2026-06-11 03:33:14 +08:00

1.4 KiB

Factory Pattern

Overview

The Factory pattern allows dynamic creation of instances without specifying the exact class. Each module uses a factory to decouple creation from usage.

Structure

# In module __init__.py (e.g., data_module/dataset/__init__.py)
DATASET_FACTORY: Dict[str, type] = {}

def DatasetFactory(data_name: str):
    """Create dataset instance by name."""
    dataset = DATASET_FACTORY.get(data_name, None)
    if dataset is None:
        # Fallback to default
        dataset = DATASET_FACTORY.get('simple')
    return dataset

Usage

# Consumer code doesn't need to know concrete class
dataset = DatasetFactory(cfg.dataset.name)

Benefits

  • Loose coupling: Consumer doesn't import concrete classes
  • Extensibility: Add new types without changing consumer code
  • Fallback handling: Graceful degradation for unknown types
  • Centralized registry: Single source of truth for available types

Implementation Details

  1. Define factory dict at module level
  2. Factory function handles lookup and fallback
  3. Return class (not instance) for deferred initialization
  4. None result triggers fallback to default implementation

Common Patterns

# With config integration
def DatasetFactory(cfg):
    data_name = cfg.dataset.name
    dataset_cls = DATASET_FACTORY.get(data_name)
    if dataset_cls is None:
        raise ValueError(f"Unknown dataset: {data_name}")
    return dataset_cls(cfg)