💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、豆包、星火、月之暗面及文生图、文生视频 广告
# 一、工厂模式(创建型模式) 工厂模式具体可分为三类模式:简单工厂模式,工厂方法模式,抽象工厂模式 ## 1.简单工厂模式 又称为静态工厂方法(Static Factory Method)模式,它属于类创建型模式。在简单工厂模式中,可以根据参数的不同返回不同类的实例。简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。 **UML类图:** ![](https://img.kancloud.cn/65/4d/654d61c3038dc118604d94d1d7459817_645x315.png) **示例代码:** ![](https://img.kancloud.cn/1f/29/1f291f02bcccfd20b27fb123792b6d6e_678x562.png) 简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责。 但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码 而且产品较多时,工厂方法代码将会非常复杂。 ## 2.工厂方法模式 此模式中,通过定义一个抽象的核心工厂类,并定义创建产品对象的接口,创建具体产品实例的工作延迟到其工厂子类去完成。 这样做的好处是核心类只关注工厂类的接口定义,而具体的产品实例交给具体的工厂子类去创建。当系统需要新增一个产品是,无需修改现有系统代码,只需要添加一个具体产品类和其对应的工厂子类,是系统的扩展性变得很好,符合面向对象编程的开闭原则。 **UML类图:** ![](https://img.kancloud.cn/38/76/3876f657a6c6006a3495f129bcdb00f3_780x392.png) **示例代码:** ![](https://img.kancloud.cn/96/8f/968f878f234c6bc21384ba6d59f15f6e_670x428.png) ![](https://img.kancloud.cn/cd/04/cd04fdf31205ebd0d55282a2d2f657a4_663x464.png) 工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了面向对象的多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点。 在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不负责产品类被实例化这种细节,这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。 ## 3.抽象工厂模式 提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。抽象工厂模式又称为Kit模式,属于对象创建型模式。 此模式是对工厂方法模式的进一步扩展。在工厂方法模式中,一个具体的工厂负责生产一类具体的产品,即一对一的关系,但是,如果需要一个具体的工厂生产多种产品对象,那么就需要用到抽象工厂模式了。 **UML类图:** ![](https://img.kancloud.cn/59/d7/59d730fe9ff928a89d31cd4f7b6e24b2_414x439.png) **角色:** * 抽象工厂(AbstractFactory):担任这个角色的是抽象工厂模式的核心,是与应用系统的商业逻辑无关的。 * 具体工厂(Factory):这个角色直接在客户端的调用下创建产品的实例,这个角色含有选择合适的产品对象的逻辑,而这个逻辑是与应用系统商业逻辑紧密相关的。 * 抽象产品(AbstractProduct):担任这个角色的类是抽象工厂模式所创建的对象的父类,或它们共同拥有的接口 * 具体产品(Product):抽象工厂模式所创建的任何产品对象都是一个具体的产品类的实例。 **示例代码:** 抽象产品和具体产品 ![](https://img.kancloud.cn/f1/67/f1673e483820e24f447a48555be724c8_670x665.png) 抽象工厂和具体工厂 ![](https://img.kancloud.cn/ca/98/ca98d15efb4a9b54caf57abac27cb752_666x440.png)