那个网站做租赁好,网站关键词在哪设置,苏州网站建设制作网络公司,深圳 网站建设公司定义
简单工厂模式#xff08;Simple Factory Pattern#xff09;是一种创建型设计模式#xff0c;用于通过一个工厂类来创建某个产品类的实例#xff0c;而不直接在客户端#xff08;调用方#xff09;中实例化对象。
这种模式的主要思想是将对象的创建逻辑集中在一个…定义
简单工厂模式Simple Factory Pattern是一种创建型设计模式用于通过一个工厂类来创建某个产品类的实例而不直接在客户端调用方中实例化对象。
这种模式的主要思想是将对象的创建逻辑集中在一个地方客户端只需要知道工厂提供的接口或方法而无需关心具体产品类的实现细节。
组成
工厂类Factory负责创建产品对象。工厂类包含一个方法根据传入的参数来决定返回哪一个具体的产品类实例。产品类Product产品类是所有对象的父类或接口定义了所有产品的公共接口或抽象类。具体产品类ConcreteProduct这些类是工厂类创建的实际对象每个具体产品类实现了产品类定义的接口或继承了产品的抽象类。
简单工厂模式通常不是一个真正意义上的设计模式而是一个编程技巧因此它有时也被称为静态工厂方法模式。
代码
假设我们有一个场景创建不同种类的汽车Car对象。通过简单工厂模式我们可以定义一个工厂类根据需要创建不同品牌的汽车对象。
// 产品接口抽象产品类
interface Car {void drive();
}// 具体产品类宝马汽车
class BMW implements Car {Overridepublic void drive() {System.out.println(Driving a BMW.);}
}// 具体产品类奔驰汽车
class Benz implements Car {Overridepublic void drive() {System.out.println(Driving a Benz.);}
}// 具体产品类奥迪汽车
class Audi implements Car {Overridepublic void drive() {System.out.println(Driving an Audi.);}
}// 简单工厂类
class CarFactory {public static Car createCar(String type) {switch (type) {case BMW:return new BMW();case Benz:return new Benz();case Audi:return new Audi();default:throw new IllegalArgumentException(Unknown car type.);}}
}// 客户端代码
public class SimpleFactoryExample {public static void main(String[] args) {// 使用工厂类创建不同的汽车Car bmw CarFactory.createCar(BMW);bmw.drive();Car benz CarFactory.createCar(Benz);benz.drive();Car audi CarFactory.createCar(Audi);audi.drive();}
}
代码说明
Car 是产品接口定义了所有汽车类需要实现的 drive() 方法。BMW、Benz 和 Audi 是实现了 Car 接口的具体产品类。CarFactory 是简单工厂类它通过 createCar 方法根据传入的汽车类型type来返回具体的产品对象。在 SimpleFactoryExample 类中客户端通过 CarFactory.createCar() 方法来创建不同类型的汽车对象并调用它们的 drive() 方法。
优点
集中管理对象创建对象的创建逻辑集中在工厂类中减少了客户端的复杂性。客户端只需要知道如何调用工厂方法而不需要知道具体的产品类如何创建。减少代码重复如果有多个地方需要创建相似的对象工厂方法可以减少代码重复确保对象创建的一致性。遵循单一职责原则工厂类专注于对象的创建客户端专注于业务逻辑职责分离代码更清晰。
缺点
不易扩展如果需要添加新的产品类比如新增一种汽车类型就需要修改工厂类的代码这违反了开闭原则Open-Closed Principle。开闭原则要求对扩展开放对修改关闭。产品类别有限制简单工厂适合产品种类较少的场景。如果产品种类太多工厂类可能会变得臃肿包含大量 switch-case 或 if-else 语句导致代码可读性和维护性降低。职责过重随着产品种类的增加工厂类可能承担过多职责成为系统中的“上帝类”这违背了设计中的单一职责原则。
场景
产品种类较少当需要创建的对象种类较少时简单工厂模式是一个不错的选择因为它的实现简单直观。客户端不关心产品的创建过程如果客户端不关心对象如何被创建只关心如何使用对象那么可以使用简单工厂模式将对象的创建逻辑封装在工厂类中。需要避免代码重复在系统的多个地方需要创建相似的对象时工厂方法可以帮助减少代码重复维护一致性。
简单工厂 vs 工厂方法模式 vs 抽象工厂模式
简单工厂模式所有的对象创建都在一个工厂类中实现通过传入参数来决定创建哪种产品类。这种模式适合简单的场景。工厂方法模式通过定义一个工厂接口并为每个产品类提供一个具体的工厂类来创建对应的产品。工厂方法模式符合开闭原则增加新的产品时无需修改已有工厂类只需新增对应的工厂类即可。抽象工厂模式用于创建一系列相关的对象。抽象工厂模式为创建一组相关或相互依赖的对象提供了一个接口而无需指定它们的具体类。
总结
简单工厂模式是实现对象创建的一种常见方式能够将产品对象的创建集中到一个工厂类中减少客户端的复杂性。虽然它易于理解和实现但在产品种类较多时不容易扩展因此适合用于简单场景。对于更复杂的场景可能需要工厂方法模式或抽象工厂模式来增强灵活性和扩展性。