Interfaces + Factory pattern = Decoupled architecture