设计模式:工厂模式
设计模式:工厂模式
赵海波设计模式:工厂模式
1. 什么是工厂模式?
工厂模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但让子类决定实例化哪个类。换句话说,工厂模式将对象的创建过程封装起来,使得客户端不需要知道具体的创建细节,而是通过工厂接口来获取对象实例。
工厂模式的主要有三种变体:
简单工厂模式(Simple Factory Pattern):不属于GoF的23种设计模式之一,但常被提及。它是通过一个工厂类来创建对象,通常会有一个静态方法根据参数来返回不同的对象实例。
- 简单来说就是一个窗口打菜,想吃什么得告诉窗口的阿姨让他帮你找
工厂方法模式(Factory Method Pattern):定义一个创建对象的接口,让子类决定实例化哪个类。工厂方法使得一个类的实例化延迟到其子类。
- 可以理解为同时有多个窗口卖吃的,但是每个窗口只卖一种
抽象工厂模式(Abstract Factory Pattern):提供一个接口,用于创建相关或依赖对象的家族,而无需明确指定具体类。
2. 如何使用工厂模式?
2.1 工厂方法
假设我们有一个产品接口Product
,以及两个具体的产品实现类ConcreteProductA
和ConcreteProductB
。
1 | // 产品接口 |
然后,我们定义一个工厂接口Factory
,以及两个具体的工厂实现类ConcreteFactoryA
和ConcreteFactoryB
。
1 | // 工厂接口 |
客户端代码可以通过工厂来创建具体的产品实例,而无需知道具体产品类的细节。
1 | public class Client { |
2.2 抽象工厂
抽象工厂又可以被理解为是工厂的工厂
假设华为和小米分别有两个工厂,同时他们都生产手机和路由器,那么就可以抽象为同一类的工厂
我们可以看到抽象工厂模式的基本结构包括以下几个部分:
- 抽象工厂接口(IProductFactory):定义了创建一系列相关对象的方法(如
phoneProduct()
和routerProduct()
),它不负责实现具体的实例化过程。 - 具体工厂类(HuaweiFactory、XiaomiFactory):实现抽象工厂接口,负责具体产品(如华为手机、华为路由器或小米手机、小米路由器)的实例化。
- 抽象产品接口(IPhoneProduct、IRouterProduct):为不同产品类型定义接口(如手机和路由器),这些接口规定了产品应该具备的功能(如
start()
、shutdown()
等)。 - 具体产品类(HuaweiPhone、XiaomiPhone、HuaweiRouter、XiaomiRouter):实现抽象产品接口,具体定义了产品的行为和属性。
通过工厂类来创建对象,客户端代码就可以依赖于抽象工厂和产品接口,而不需要关心具体的实现细节。例如,使用HuaweiFactory
可以创建HuaweiPhone
和HuaweiRouter
,而使用XiaomiFactory
可以创建XiaomiPhone
和XiaomiRouter
。
评论
匿名评论隐私政策