自己做的网站怎么放上网计算机培训班有用吗
精心整理了最新的面试资料和简历模板,有需要的可以自行获取
点击前往百度网盘获取
点击前往夸克网盘获取
一、模式定义与分类
工厂模式(Factory Pattern)是创建型设计模式的核心成员之一,主要解决对象创建过程中的灵活性问题。根据抽象程度不同分为三种形态:
- 简单工厂(静态工厂)
- 工厂方法模式
- 抽象工厂模式
二、模式适用场景
- 需要隔离对象创建逻辑时
- 系统需要动态扩展产品族时
- 需要统一管理对象创建过程
- 对象创建依赖复杂初始化参数
三、模式实现演进
3.1 简单工厂模式
// 产品接口
interface Vehicle {void deliver();
}class Truck implements Vehicle {@Overridepublic void deliver() {System.out.println("陆路运输");}
}class Ship implements Vehicle {@Overridepublic void deliver() {System.out.println("海运运输");}
}// 简单工厂
class VehicleFactory {public static Vehicle createVehicle(String type) {return switch (type.toLowerCase()) {case "truck" -> new Truck();case "ship" -> new Ship();default -> throw new IllegalArgumentException("未知运输类型");};}
}// 使用示例
public class Client {public static void main(String[] args) {Vehicle transport = VehicleFactory.createVehicle("truck");transport.deliver();}
}
特点:
- 静态创建方法
- 违反开闭原则(新增类型需修改工厂)
- 适合产品类型较少的情况
3.2 工厂方法模式
// 抽象工厂
abstract class Logistics {public void planDelivery() {Vehicle vehicle = createVehicle();vehicle.deliver();}// 工厂方法abstract Vehicle createVehicle();
}// 具体工厂
class RoadLogistics extends Logistics {@OverrideVehicle createVehicle() {return new Truck();}
}class SeaLogistics extends Logistics {@OverrideVehicle createVehicle() {return new Ship();}
}// 客户端调用
public class Client {public static void main(String[] args) {Logistics logistics = new RoadLogistics();logistics.planDelivery();}
}
优势:
- 符合开闭原则
- 创建逻辑延迟到子类
- 支持多态创建
3.3 抽象工厂模式
// 产品族接口
interface GUIFactory {Button createButton();Checkbox createCheckbox();
}// 具体工厂
class WindowsFactory implements GUIFactory {public Button createButton() {return new WindowsButton();}public Checkbox createCheckbox() {return new WindowsCheckbox();}
}class MacOSFactory implements GUIFactory {public Button createButton() {return new MacOSButton();}public Checkbox createCheckbox() {return new MacOSCheckbox();}
}// 客户端代码
public class Application {private GUIFactory factory;public Application(GUIFactory factory) {this.factory = factory;}public void renderUI() {Button button = factory.createButton();button.paint();}
}
应用场景:
- 需要创建产品族
- 保证产品兼容性
- 跨平台UI开发
- 数据库访问抽象
四、模式对比分析
维度 | 简单工厂 | 工厂方法 | 抽象工厂 |
---|---|---|---|
创建范围 | 单一产品 | 单一产品 | 产品族 |
扩展性 | 修改工厂类 | 新增子类 | 新增工厂类 |
复杂度 | 低 | 中 | 高 |
适用场景 | 固定产品类型 | 单一产品扩展 | 关联产品组合 |
五、最佳实践建议
- 避免过度设计:简单场景优先考虑简单工厂
- 结合依赖注入:Spring等框架中常用工厂模式实现IoC
- 使用枚举优化:增强简单工厂的可维护性
- 注意层次划分:抽象工厂推荐使用接口而非抽象类
六、实际应用案例
- JDK中的
Calendar.getInstance()
- Spring框架的BeanFactory
- Logback日志框架的AppenderFactory
- JUnit测试用例工厂
通过本文可以全面了解工厂模式的不同形态及其适用场景。实际开发中应根据业务复杂度选择合适的工厂实现,在灵活性和简洁性之间找到最佳平衡点。工厂模式的价值不仅在于对象创建本身,更在于它为实现依赖倒置原则提供了有效途径。