# 工厂模式 **Repository Path**: gitLDR_admin/factory_mode ## Basic Information - **Project Name**: 工厂模式 - **Description**: No description available - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2019-03-13 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 工厂模式 #### 简单工厂模式 ##### 简单工厂类图 ![简单工厂类图](https://images.gitee.com/uploads/images/2019/0314/091940_7c478fe4_1799190.png "屏幕截图.png") ##### 缺点 - 工厂类的职责相对过重,增加新的产品时需要修改工厂类的判断逻辑,违背开闭原则。 - 不易于扩展过于复杂的产品结构。 ##### 场景 适于产品比较稳定,并且产品较少的情况 #### 工厂方法模式 ##### 工厂方法模式类图 ![工厂方法模式类图](https://images.gitee.com/uploads/images/2019/0314/101248_a0480c47_1799190.png "屏幕截图.png") ##### 场景 - 创建对象需要大量重复的代码 - 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。 - 一个类通过其子类来指定创建哪个对象。 ##### 优点 - 用户只需要关心所需产品对应的工厂,无须关心创建的细节。 - 加入新的产品符合开闭原则,提高了系统的可扩展性。 ##### 缺点 - 类的个数容易过多,增加了代码结构的复杂度。 - 增加了系统的抽象性和理解难度。 #### 抽象工厂模式 ##### 抽象工厂模式类图 ![抽象工厂模式类图](https://images.gitee.com/uploads/images/2019/0314/105413_b978633b_1799190.png "屏幕截图.png") ##### 适用场景 - 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节。 - 强调一系列相关的产品对象(属于同一产品族)一起使用创建对象需要大量重复的代码。 - 提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖于具体实现。 ##### 优点 - 具体产品在应用层代码隔离,无须关心创建细节。 - 将一个系列的产品族统一到一起创建。 ##### 缺点 - 规定了所有可能被创建的产品集合,产品族中扩展新的产品困难,需要修改抽象工厂接口。 - 增加了系统的抽象性和理解性难度。 #### 产品等级结构与产品族关系 产品族是同一个品牌不同产品。产品等级结构是不同品牌,并且产品族都是一样的。 同一个品牌的三个产品组成产品族。 ##### 解决 解决产品链和产品等级结构,产品族的复杂情况,并且每一个创建逻辑差异化比较高