工厂模式使用场景大全

🏭 简单工厂模式使用场景

特征识别

  • ✅ 创建同一类型的不同对象
  • ✅ 创建逻辑相对简单
  • ✅ 产品类型相对固定,不经常变化
  • ✅ 客户端不需要知道具体的创建细节

📱 实际应用场景

1. 日志记录器

// 根据配置创建不同的日志记录器
Logger logger = LoggerFactory.createLogger("file");    // 文件日志
Logger logger = LoggerFactory.createLogger("console"); // 控制台日志
Logger logger = LoggerFactory.createLogger("database");// 数据库日志

适用原因: 都是Logger类型,只是输出目标不同

2. 数据库连接

// 根据数据库类型创建连接
Connection conn = ConnectionFactory.createConnection("mysql");
Connection conn = ConnectionFactory.createConnection("oracle");
Connection conn = ConnectionFactory.createConnection("postgresql");

适用原因: 都是Connection接口,实现方式不同

3. 图片格式处理

// 根据文件扩展名创建对应的图片处理器
ImageProcessor processor = ImageProcessorFactory.create("jpg");
ImageProcessor processor = ImageProcessorFactory.create("png"); 
ImageProcessor processor = ImageProcessorFactory.create("gif");

适用原因: 都处理图片,但算法不同

4. 支付方式

// 根据支付类型创建支付处理器
PaymentProcessor payment = PaymentFactory.create("alipay");
PaymentProcessor payment = PaymentFactory.create("wechat");
PaymentProcessor payment = PaymentFactory.create("bank");

适用原因: 都是支付功能,接口一致

5. 消息发送

// 根据消息类型创建发送器
MessageSender sender = MessageFactory.create("email");
MessageSender sender = MessageFactory.create("sms");
MessageSender sender = MessageFactory.create("push");

适用原因: 都是发送消息,方式不同

6. 文档解析器

// 根据文件类型创建解析器
DocumentParser parser = ParserFactory.create("pdf");
DocumentParser parser = ParserFactory.create("word");
DocumentParser parser = ParserFactory.create("excel");

7. 游戏角色创建

// 根据职业创建游戏角色
GameCharacter character = CharacterFactory.create("warrior");
GameCharacter character = CharacterFactory.create("mage");
GameCharacter character = CharacterFactory.create("archer");

8. 算法选择

// 根据算法类型创建排序器
Sorter sorter = SorterFactory.create("quicksort");
Sorter sorter = SorterFactory.create("mergesort");
Sorter sorter = SorterFactory.create("bubblesort");

🏢 抽象工厂模式使用场景

特征识别

  • ✅ 创建一系列相关的对象族
  • ✅ 需要保证产品族的一致性
  • ✅ 需要在不同产品族间切换
  • ✅ 产品之间有依赖关系

🌟 实际应用场景

1. 跨平台UI组件系统

// Windows产品族
UIFactory windowsFactory = new WindowsUIFactory();
Button winButton = windowsFactory.createButton();      // Windows按钮
Menu winMenu = windowsFactory.createMenu();            // Windows菜单  
Dialog winDialog = windowsFactory.createDialog();      // Windows对话框

// Mac产品族
UIFactory macFactory = new MacUIFactory();
Button macButton = macFactory.createButton();          // Mac按钮
Menu macMenu = macFactory.createMenu();                // Mac菜单
Dialog macDialog = macFactory.createDialog();          // Mac对话框

适用原因: 同一平台的UI组件需要风格统一

2. 数据库访问层

// MySQL产品族
DatabaseFactory mysqlFactory = new MySQLFactory();
Connection mysqlConn = mysqlFactory.createConnection();
Command mysqlCmd = mysqlFactory.createCommand();
Transaction mysqlTrans = mysqlFactory.createTransaction();

// Oracle产品族  
DatabaseFactory oracleFactory = new OracleFactory();
Connection oracleConn = oracleFactory.createConnection();
Command oracleCmd = oracleFactory.createCommand();
Transaction oracleTrans = oracleFactory.createTransaction();

适用原因: 同一数据库的组件需要协同工作

3. 游戏装备系统

// 新手装备族
EquipmentFactory beginnerFactory = new BeginnerEquipmentFactory();
Weapon beginnerWeapon = beginnerFactory.createWeapon();    // 新手剑
Armor beginnerArmor = beginnerFactory.createArmor();       // 新手护甲
Accessory beginnerRing = beginnerFactory.createAccessory();// 新手戒指

// 传奇装备族
EquipmentFactory legendaryFactory = new LegendaryEquipmentFactory();
Weapon legendaryWeapon = legendaryFactory.createWeapon();  // 传奇剑
Armor legendaryArmor = legendaryFactory.createArmor();     // 传奇护甲
Accessory legendaryRing = legendaryFactory.createAccessory(); // 传奇戒指

适用原因: 同等级装备需要搭配协调

4. 主题系统(网站/App)

// 深色主题族
ThemeFactory darkFactory = new DarkThemeFactory();
Background darkBg = darkFactory.createBackground();       // 深色背景
FontStyle darkFont = darkFactory.createFont();           // 深色主题字体
ColorScheme darkColors = darkFactory.createColorScheme(); // 深色配色

// 浅色主题族
ThemeFactory lightFactory = new LightThemeFactory();
Background lightBg = lightFactory.createBackground();     // 浅色背景
FontStyle lightFont = lightFactory.createFont();         // 浅色主题字体
ColorScheme lightColors = lightFactory.createColorScheme(); // 浅色配色

5. 汽车制造系统

// 豪华车系列
VehicleFactory luxuryFactory = new LuxuryVehicleFactory();
Engine luxuryEngine = luxuryFactory.createEngine();       // V8发动机
Tire luxuryTire = luxuryFactory.createTire();             // 高性能轮胎
Interior luxuryInterior = luxuryFactory.createInterior(); // 真皮内饰

// 经济车系列
VehicleFactory economyFactory = new EconomyVehicleFactory();
Engine economyEngine = economyFactory.createEngine();     // 经济型发动机
Tire economyTire = economyFactory.createTire();           // 普通轮胎
Interior economyInterior = economyFactory.createInterior(); // 布料内饰

6. 电商系统的商品展示

// 移动端产品族
DisplayFactory mobileFactory = new MobileDisplayFactory();
ProductCard mobileCard = mobileFactory.createProductCard();   // 手机端商品卡片
ReviewSection mobileReview = mobileFactory.createReview();   // 手机端评论区
PriceDisplay mobilePrice = mobileFactory.createPrice();      // 手机端价格显示

// PC端产品族
DisplayFactory pcFactory = new PCDisplayFactory();
ProductCard pcCard = pcFactory.createProductCard();         // PC端商品卡片
ReviewSection pcReview = pcFactory.createReview();         // PC端评论区
PriceDisplay pcPrice = pcFactory.createPrice();            // PC端价格显示

7. 报表系统

// Excel报表族
ReportFactory excelFactory = new ExcelReportFactory();
Chart excelChart = excelFactory.createChart();             // Excel图表
Table excelTable = excelFactory.createTable();             // Excel表格
Summary excelSummary = excelFactory.createSummary();       // Excel摘要

// PDF报表族
ReportFactory pdfFactory = new PDFReportFactory();
Chart pdfChart = pdfFactory.createChart();                 // PDF图表
Table pdfTable = pdfFactory.createTable();                 // PDF表格
Summary pdfSummary = pdfFactory.createSummary();           // PDF摘要

🎯 如何选择使用哪种模式?

使用简单工厂的情况:

  • 🔹 只需要创建一种类型的不同实现
  • 🔹 创建逻辑简单,变化不频繁
  • 🔹 产品之间没有关联性
  • 🔹 例如: 创建不同的支付方式、日志记录器

使用抽象工厂的情况:

  • 🔸 需要创建多种相关产品
  • 🔸 产品之间需要协同工作
  • 🔸 要保证产品族的一致性
  • 🔸 需要在不同产品族之间切换
  • 🔸 例如: UI主题切换、跨平台应用开发

💡 实践建议

简单工厂实践要点:

  1. 保持简单:不要让工厂方法过于复杂
  2. 易于扩展:新增产品类型时容易修改
  3. 统一接口:所有产品实现相同接口
  4. 配置驱动:可以通过配置文件控制创建哪种产品

抽象工厂实践要点:

  1. 产品族规划:提前规划好产品族的结构
  2. 一致性保证:确保同一工厂创建的产品风格统一
  3. 扩展考虑:新增产品族相对容易,新增产品类型较困难
  4. 依赖管理:处理好产品之间的依赖关系

⚠️ 注意事项

简单工厂的局限性:

  • 违反开闭原则(新增产品需修改工厂)
  • 工厂类责任过重
  • 难以扩展复杂的产品结构

抽象工厂的局限性:

  • 新增产品类型困难(需修改所有工厂)
  • 结构复杂,理解成本高
  • 过度设计风险

选择合适的模式是关键,不要为了使用设计模式而使用!

上一篇