|
|
|
|
@ -1,2 +1,79 @@
|
|
|
|
|
# factory
|
|
|
|
|
# 简单工厂模式实现
|
|
|
|
|
|
|
|
|
|
## 项目介绍
|
|
|
|
|
|
|
|
|
|
本项目实现了设计模式中的**简单工厂模式**(Simple Factory Pattern),这是一种创建型设计模式,用于封装对象的创建逻辑。
|
|
|
|
|
|
|
|
|
|
## 设计模式说明
|
|
|
|
|
|
|
|
|
|
### 简单工厂模式的核心角色:
|
|
|
|
|
|
|
|
|
|
1. **抽象产品(Product)** - 定义产品的接口或抽象类
|
|
|
|
|
2. **具体产品(ConcreteProduct)** - 实现抽象产品接口的具体类
|
|
|
|
|
3. **工厂类(Factory)** - 负责创建具体产品实例的类
|
|
|
|
|
|
|
|
|
|
### 本项目中的实现:
|
|
|
|
|
|
|
|
|
|
- **Product** - 产品接口,定义了operation()方法
|
|
|
|
|
- **ConcreteProductA、ConcreteProductB** - 具体产品实现
|
|
|
|
|
- **Factory** - 工厂类,通过静态方法createProduct()创建产品
|
|
|
|
|
|
|
|
|
|
## 项目结构
|
|
|
|
|
|
|
|
|
|
```
|
|
|
|
|
├── src/
|
|
|
|
|
│ └── main/
|
|
|
|
|
│ └── java/
|
|
|
|
|
│ ├── Product.java # 产品接口
|
|
|
|
|
│ ├── ConcreteProductA.java # 具体产品A
|
|
|
|
|
│ ├── ConcreteProductB.java # 具体产品B
|
|
|
|
|
│ ├── Factory.java # 工厂类
|
|
|
|
|
│ └── TestFactory.java # 测试类
|
|
|
|
|
└── README.md # 项目说明文档
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 代码特点
|
|
|
|
|
|
|
|
|
|
- ✅ 遵循SOLID设计原则,特别是单一职责原则
|
|
|
|
|
- ✅ 接口与实现分离,符合依赖倒置原则
|
|
|
|
|
- ✅ 完善的参数验证和异常处理机制
|
|
|
|
|
- ✅ 详细的JavaDoc文档注释
|
|
|
|
|
- ✅ 全面的测试用例覆盖
|
|
|
|
|
|
|
|
|
|
## 使用示例
|
|
|
|
|
|
|
|
|
|
```java
|
|
|
|
|
// 创建产品A
|
|
|
|
|
Product productA = Factory.createProduct("A");
|
|
|
|
|
productA.operation(); // 输出: ConcreteProductA 执行操作
|
|
|
|
|
|
|
|
|
|
// 创建产品B
|
|
|
|
|
Product productB = Factory.createProduct("B");
|
|
|
|
|
productB.operation(); // 输出: ConcreteProductB 执行操作
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 运行测试
|
|
|
|
|
|
|
|
|
|
在项目目录下执行以下命令运行测试:
|
|
|
|
|
|
|
|
|
|
```bash
|
|
|
|
|
cd src/main/java
|
|
|
|
|
javac *.java
|
|
|
|
|
java TestFactory
|
|
|
|
|
```
|
|
|
|
|
|
|
|
|
|
## 简单工厂模式的优缺点
|
|
|
|
|
|
|
|
|
|
### 优点:
|
|
|
|
|
- 封装了对象的创建过程,客户端不需要知道如何创建对象
|
|
|
|
|
- 降低了客户端与具体产品的耦合度
|
|
|
|
|
- 便于统一管理对象的创建逻辑
|
|
|
|
|
|
|
|
|
|
### 缺点:
|
|
|
|
|
- 工厂类集中了所有产品的创建逻辑,违反了开闭原则
|
|
|
|
|
- 添加新产品时需要修改工厂类的代码
|
|
|
|
|
|
|
|
|
|
## 适用场景
|
|
|
|
|
|
|
|
|
|
- 工厂类负责创建的对象比较少
|
|
|
|
|
- 客户端只知道传入工厂类的参数,不关心如何创建对象的逻辑
|