工厂设计模式,工厂设计模式概述
工厂设计模式(Factory Design Pattern)是一种常用的面向对象设计模式,它属于创建型模式。这种模式提供了一种创建对象的最佳方式,通过提供一个创建对象的接口,允许子类决定实例化哪一个类。工厂方法模式使一个类的实例化延迟到其子类。
工厂模式的特点
1. 封装性:创建过程完全封装在工厂内部,客户不需要知道具体的实现细节。2. 产品族:工厂模式可以很容易地扩展到生产不同产品的工厂,只需要增加相应的产品类和相应的工厂类。3. 可维护性:由于创建过程被封装,修改创建逻辑时,只需要修改工厂类,不需要修改客户代码。
工厂模式的类型
1. 简单工厂模式(Simple Factory Pattern):虽然不属于GoF的23种设计模式之一,但在实际应用中非常常见。它不属于23种设计模式,一部分原因是因为它违反了开闭原则,即对扩展开放,对修改封闭。每增加一个产品类,都需要增加一个具体的产品类和对象实现工厂,这样增加了系统的复杂度。2. 工厂方法模式(Factory Method Pattern):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。3. 抽象工厂模式(Abstract Factory Pattern):创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式可以让你创建多个产品族中的产品。当一个产品族中的多个对象被设计成一起工作时,它能够保证客户端始终只使用同一个产品族中的对象。
工厂模式的适用场景
1. 当一个类不知道它所必须创建的对象的类的时候。2. 当一个类希望由它的子类来指定创建对象的时候。3. 当类将创建对象的职责委托给多个帮助子类中的某一个,并且你希望将哪一个帮助子类是代理者这一信息局部化的时候。
工厂模式的优缺点
优点
1. 良好的封装性:一个对象创建是由一个工厂内部来完成的。2. 扩展性较好:增加新产品时,只需添加一个具体产品类和对应的具体工厂类。3. 屏蔽产品类:产品类的实现如何变化,调用者不用关心,只会影响到工厂类。
缺点
1. 每增加一个产品类,就需要增加两个类(一个产品类和一个对应的具体工厂类),增加了系统的复杂度。
示例代码(Python)
假设我们有一个简单的产品类和工厂类:
```pythonclass Product: def use: pass
class ConcreteProductA: def use: return Product A
class ConcreteProductB: def use: return Product B
class Factory: def create_product: pass
class ConcreteFactoryA: def create_product: return ConcreteProductA
class ConcreteFactoryB: def create_product: return ConcreteProductB
使用工厂factory_a = ConcreteFactoryAproduct_a = factory_a.create_productprintqwe2
factory_b = ConcreteFactoryBproduct_b = factory_b.create_productprintqwe2```
这个例子中,我们创建了两个具体的产品类`ConcreteProductA`和`ConcreteProductB`,以及两个具体的工厂类`ConcreteFactoryA`和`ConcreteFactoryB`。每个工厂类负责创建对应的产品实例。客户代码只需要与工厂类交互,不需要知道具体的产品实现细节。
工厂设计模式概述

工厂设计模式(Factory Pattern)是一种常用的创建型设计模式,它提供了一种创建对象的最佳方式。在工厂模式中,我们不再直接通过关键字来实例化对象,而是通过调用工厂方法来获取对象。这种方式将对象的创建和使用分离,提高了代码的灵活性和可维护性。
工厂设计模式的核心概念

工厂设计模式的核心概念包括以下四个角色:
抽象产品(Product):定义了产品的接口或者抽象类,所有的具体产品类都应该实现这个接口或继承这个抽象类。
具体产品(Concrete Product):实现了抽象产品接口的具体产品类。工厂模式创建的最终对象,是具体产品类的实例。
抽象工厂(Creator):提供了一个创建产品的接口,用于创建和返回一个产品实例。
具体工厂(Concrete Creator):实现了抽象工厂接口的具体工厂类。它负责实例化具体的产品对象,并且返回一个产品实例。
工厂设计模式的类型

工厂设计模式主要有以下几种类型:
简单工厂模式(Simple Factory):简单工厂模式不是严格意义上的设计模式,因为它并不符合开闭原则。但它提供了一个简单的对象创建机制。
工厂方法模式(Factory Method):工厂方法模式允许子类决定实例化哪一个类,将对象的创建过程推迟到子类。
抽象工厂模式(Abstract Factory):抽象工厂模式提供一个接口,创建一系列相关或相互依赖的对象,而无需指定它们具体类。
简单工厂模式

简单工厂模式是一种最简单的工厂模式,它只有一个工厂类,根据传入的参数不同,返回不同类的实例。
简单工厂模式的结构如下:
产品接口(Product Interface):定义产品的公共接口。
具体产品(Concrete Product):实现产品接口的具体类。
工厂类(Factory):根据传入的参数,返回不同类的实例。
工厂方法模式

工厂方法模式允许子类决定实例化哪一个类,将对象的创建过程推迟到子类。
工厂方法模式的结构如下:
抽象工厂(Creator):定义创建产品的接口。
具体工厂(Concrete Creator):实现具体的工厂逻辑,生成不同的具体产品。
抽象产品(Product):定义产品接口。
具体产品(Concrete Product):实现抽象产品接口的具体产品类。
抽象工厂模式

抽象工厂模式提供一个接口,创建一系列相关或相互依赖的对象,而无需指定它们具体类。
抽象工厂模式的结构如下:
抽象工厂(Abstract Factory):定义创建不同产品的抽象方法。
具体工厂(Concrete Factory):实现具体的工厂逻辑,生成不同的具体产品。
抽象产品(Abstract Product):定义产品接口,抽象产品可以有多种类型。
具体产品(Concrete Product):具体产品实现抽象产品接口,并根据具体需求提供不同的实现。
工厂设计模式的优点

工厂设计模式具有以下优点:
降低模块间的耦合度:通过工厂类来创建对象,降低了模块间的耦合度。
提高代码的灵活性和可维护性:通过工厂类来创建对象,使得代码更加灵活,易于维护。
符合开闭原则:工厂设计模式符合开闭原则,对扩展开放、对修改封闭。
工厂设计模式的缺点

工厂设计模式也存在一些缺点:
增加系统复杂度:工厂设计模式引入了新的类和接口,增加了系统的复杂度。
工厂类职责过重:在工厂方法模式和抽象工厂模式中,