You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
本项目包含以下核心内容:
- **简单工厂模式**的Java实现代码
- **工厂方法模式**的UML类图设计
- PlantUML使用指南和教程
- 完整的代码示例和测试用例
## 项目结构
```
├── .trae/ # TRAE AI配置目录
│ ├── java_templates.json # Java代码模板配置
│ ├── rules/ # 规则配置
│ │ └── project_rules.md
│ └── trae_config.json # 主配置文件
├── src/ # 源代码目录
│ └── main/
│ └── java/ # Java实现代码
│ ├── Product.java # 产品接口
│ ├── ConcreteProductA.java # 具体产品A
│ ├── ConcreteProductB.java # 具体产品B
│ ├── Factory.java # 简单工厂类
│ └── Main.java # 测试主类
├── factory_method_uml.puml # 工厂方法模式UML类图
├── plantuml_guide.md # PlantUML使用指南
└── README.md # 项目说明文档
```
## 1. 简单工厂模式实现
### 核心组件
#### 1.1 产品接口 (Product.java)
```java
/**
* 产品接口
* 定义所有产品共有的操作方法
*/
public interface Product {
/**
* 产品的操作方法
*/
void operation();
}
```
#### 1.2 具体产品类 (ConcreteProductA.java, ConcreteProductB.java)
```java
/**
* 具体产品A类
* 实现产品接口的具体产品
*/
public class ConcreteProductA implements Product {
@Override
public void operation() {
System.out.println("ConcreteProductA operation executed");
}
}
```
```java
/**
* 具体产品B类
* 实现产品接口的具体产品
*/
public class ConcreteProductB implements Product {
@Override
public void operation() {
System.out.println("ConcreteProductB operation executed");
}
}
```
#### 1.3 简单工厂类 (Factory.java)
```java
/**
* 简单工厂类
* 根据参数创建不同的产品实例
*/
public class Factory {
/**
* 创建产品的静态方法
* @param type 产品类型
* @return 产品实例
* @throws IllegalArgumentException 当类型不支持或为空时抛出异常
*/
public static Product createProduct(String type) {
if (type == null || type.isEmpty()) {
throw new IllegalArgumentException("Product type cannot be null or empty");
}
if (type.equalsIgnoreCase("A")) {
return new ConcreteProductA();
} else if (type.equalsIgnoreCase("B")) {
return new ConcreteProductB();
} else {
throw new IllegalArgumentException("Unsupported product type: " + type);
}
}
}
```
#### 1.4 测试主类 (Main.java)
```java
/**
* 测试主类
* 演示简单工厂模式的使用
*/
public class Main {
/**
* 主方法
* @param args 命令行参数
*/
public static void main(String[] args) {
try {
// 测试创建产品A
Product productA = Factory.createProduct("A");
productA.operation();
// 测试创建产品B
Product productB = Factory.createProduct("B");
productB.operation();
// 测试不支持的产品类型
System.out.println("\n测试不支持的产品类型:");
try {
Product productC = Factory.createProduct("C");
} catch (IllegalArgumentException e) {
System.out.println("Expected exception: " + e.getMessage());
}
// 测试空参数
System.out.println("\n测试空参数:");
try {
Product productNull = Factory.createProduct("");
} catch (IllegalArgumentException e) {
System.out.println("Expected exception: " + e.getMessage());
}
} catch (Exception e) {
System.err.println("Unexpected error: " + e.getMessage());
e.printStackTrace();
}
}
}
```
## 2. 运行代码
### 编译和运行步骤
1. 确保已安装Java开发环境(JDK)
2. 打开命令行工具,导航到项目根目录
3. 编译Java文件:
```bash
javac src\main\java\*.java
```
4. 运行Main类:
```bash
java -cp src\main\java Main
```
### 预期输出
```
ConcreteProductA operation executed
ConcreteProductB operation executed
测试不支持的产品类型:
Expected exception: Unsupported product type: C
测试空参数:
Expected exception: Product type cannot be null or empty
```
## 3. 工厂方法模式UML类图
项目中包含了完整的工厂方法模式UML类图定义文件:factory\_method\_uml.puml
### 类图核心特点
- **抽象产品接口** (Product):定义产品的通用操作
- **具体产品类** (ConcreteProductA, ConcreteProductB):实现抽象产品接口
- **抽象创建者** (Creator):定义工厂方法接口
- **具体创建者** (ConcreteCreatorA, ConcreteCreatorB):实现工厂方法,创建具体产品
- **客户端** (Main):只依赖抽象接口,不依赖具体实现类
### 运行UML类图
2. 复制 factory\_method\_uml.puml 文件的内容
3. 粘贴到左侧编辑区
4. 点击 "Refresh" 按钮查看生成的类图
## 4. PlantUML使用指南
项目中包含详细的PlantUML使用指南:plantuml\_guide.md
### 主要内容
- 在线工具访问方法
- 基础语法教程
- 类图关系表示方法
- 样式设置技巧
- IDE集成方法
## 5. 设计模式说明
### 5.1 简单工厂模式
**核心思想**:由一个工厂类根据参数决定创建哪一种产品类的实例。
**优点**:
- 实现了对象创建和使用的分离
- 客户端不需要知道如何创建和组装产品
**缺点**:
- 工厂类职责过重
- 新增产品需要修改工厂类,违背开闭原则
### 5.2 工厂方法模式
**核心思想**:定义一个创建产品对象的接口,但由子类决定实例化的类。工厂方法让类的实例化推迟到子类中进行。
**优点**:
- 符合开闭原则,新增产品只需添加相应的创建者和产品类
- 客户端只依赖抽象接口,不依赖具体实现
- 更灵活的扩展性
**适用场景**:
- 客户端不需要知道它所需要的对象的类
- 系统需要在不修改现有代码的情况下扩展