理解设计模式:简单工厂、工厂方法与抽象工厂

需积分: 10 3 下载量 35 浏览量 更新于2024-10-23 收藏 1.21MB PDF 举报
"深入浅出设计模式 Head First Design Patterns" 设计模式是软件开发中的一种最佳实践,它提供了在特定场景下解决常见问题的标准模板。《深入浅出设计模式》这本书通过易于理解的方式介绍了设计模式,尤其是面向对象编程中的设计模式。其中,工厂模式是一种常用的设计模式,用于封装对象的创建过程,提升代码的灵活性和可维护性。 工厂模式分为三种主要类型: 1. **简单工厂模式(Simple Factory)**:也称为静态工厂方法模式,它通过一个静态方法创建对象,客户端直接调用该方法获取所需的产品。在这个模式中,工厂类通常包含一个内部判断逻辑,根据输入参数或条件决定返回哪种具体产品。简单工厂模式的优点在于简化了客户端代码,但缺点是如果产品类型增加,工厂类可能需要修改,违背了开闭原则。 2. **工厂方法模式(Factory Method)**:相比简单工厂模式,工厂方法模式将对象创建的责任交给子类,每个子类负责创建特定类型的对象。这样,当需要添加新产品时,可以通过创建新的子类来实现,而无需修改原有代码,符合开闭原则。工厂方法模式的结构包括一个抽象工厂类和多个具体工厂子类,以及对应的抽象产品类和具体产品子类。 3. **抽象工厂模式(Abstract Factory)**:抽象工厂模式提供了创建一系列相关或相互依赖对象的接口,而无需指定其具体类。在不同平台或环境下,可以有不同的抽象工厂实现,为每一种环境创建一组相关的产品对象。这使得系统能够在运行时更换产品族,增加了系统的灵活性和可扩展性。 书中通过一个生动的案例展示了如何使用工厂模式来改善代码设计。比如,暴发户坐车的例子,原本暴发户需要告诉司机具体开哪个品牌的车,但在使用工厂模式后,暴发户只需要说“开车”,具体的车辆选择则由工厂类处理。这个例子说明了工厂模式如何将特定逻辑(即选择哪个品牌车辆)从客户端代码中分离出来,使代码更加模块化和易于维护。 简单工厂模式中,暴发户坐车的场景可以抽象为以下组件: - **工厂类角色**:负责创建车的类,如`CarFactory`,包含一个静态方法`createCar()`,根据输入(如品牌名称)返回相应的车实例。 - **抽象产品角色**:代表车的接口或抽象类,如`Car`,定义了车的基本行为。 - **具体产品角色**:实际的车类,如`BenzCar`, `BmwCar`, `AudiCar`,分别实现了`Car`接口或继承了`Car`抽象类。 通过类图,我们可以清晰地看到这些角色之间的关系,以及它们如何协作来实现功能。类图是UML(统一建模语言)中的一种图表,用来表示类、接口、继承关系等概念,对于理解和设计系统结构非常有帮助。 《深入浅出设计模式》通过直观易懂的方式介绍了设计模式,特别是工厂模式的三种形式,帮助开发者更好地理解和应用这些模式,提高代码质量和可维护性。