工厂模式(Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。这样,我们就将对象的创建与使用分离,从而提高了系统的灵活性和可扩展性。
工厂模式的类型
工厂模式主要分为三种类型:简单工厂模式(Simple Factory Pattern)、工厂方法模式(Factory Method Pattern)和抽象工厂模式(Abstract Factory Pattern)。
1. 简单工厂模式(Simple Factory Pattern)
简单工厂模式不属于GoF的23种设计模式之一,但它非常常见且易于理解。它定义了一个创建对象的类,但该类使用一个静态方法来提供对外创建对象的接口,所有被创建的对象都有共同的父类或接口。
优点:
- 客户端不需要知道所创建的具体类名。
- 简单工厂模式通过对象工厂类来负责创建对象,减少了客户端的直接依赖。
缺点:
- 违反了开闭原则,即软件实体(类、模块、函数等)应对扩展开放,对修改关闭。每次增加新产品时,都需要修改工厂类。
2. 工厂方法模式(Factory Method Pattern)
工厂方法模式定义了一个用于创建对象的接口,但让子类决定要实例化的类是哪一个。工厂方法让类的实例化推迟到子类中进行。
优点:
- 用户只需要知道具体工厂的名称就可得到所要的产品,无须知道这个产品是如何被具体创建的。
- 符合开闭原则,新增一种产品时,只需要增加相应的具体产品类和对应的具体工厂类,无须对原工厂接口和抽象工厂类做任何修改。
缺点:
- 类中如果抽象产品类过多,那么工厂接口中必要的方法就很多,不利于接口的维护。
3. 抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。客户端(调用者)不依赖于产品类实例如何被创建、组合和表达的细节。
优点:
- 可以在类的内部对产品类进行约束,即对提供一系列产品接口时必须一起使用,而不能与其它产品接口一起使用,这保证了产品的正确使用。
- 增加了新的产品族时,只需要增加新的具体工厂类,不需要修改抽象工厂类接口和已存在的具体工厂类,这样就满足了开闭原则。
缺点:
- 产品族的扩展将带来系统抽象的复杂化,产品的族类越多,抽象工厂的接口及其实现类就越复杂,这样就增加了系统的具体类的数量,也增加了系统的复杂度和理解难度。
总结
工厂模式的主要目的是将对象的创建与使用分离,以提高系统的灵活性和可扩展性。选择哪种工厂模式取决于具体的应用场景和需求。
标签:--,Pattern,Factory,模式,工厂,接口,创建对象,设计模式 From: https://blog.51cto.com/u_16406687/12057666