Compare commits

...

3 Commits
main ... master

@ -1,2 +1,80 @@
HEAD
# 简单工厂模式 (Simple Factory Pattern) 示例
## 项目介绍
本项目展示了设计模式中的简单工厂模式Simple Factory Pattern的Java实现。简单工厂模式是一种创建型设计模式它提供了一个创建对象的最佳方式。在简单工厂模式中我们在创建对象时不会对客户端暴露创建逻辑而是通过一个共同的接口来指向新创建的对象。
## 设计模式说明
### 简单工厂模式的组成
1. **抽象产品Product**:定义产品的接口,是工厂方法模式所创建对象的超类型。
2. **具体产品Concrete Product**:实现抽象产品接口的具体类。
3. **工厂Factory**:负责创建具体产品的实例,包含创建产品的逻辑。
### 本项目实现的类图关系
- `Product` 接口:定义产品的共同操作
- `ConcreteProductA``ConcreteProductB`:实现 `Product` 接口的具体产品类
- `Factory`:工厂类,负责创建不同类型的产品实例
## 文件结构
```
src/
└── main/
└── java/
├── Product.java # 产品接口
├── ConcreteProductA.java # 具体产品A
├── ConcreteProductB.java # 具体产品B
└── Factory.java # 工厂类
```
## 代码说明
### Product.java
定义产品接口,声明所有产品都需要实现的操作方法。
### ConcreteProductA.java 和 ConcreteProductB.java
具体产品类,实现 `Product` 接口,提供特定的操作实现。
### Factory.java
工厂类,包含 `createProduct` 静态方法,根据传入的参数创建不同类型的产品实例。同时包含 `main` 方法用于测试代码功能。
## 使用方法
1. 确保已安装JDK
2. 编译代码:
```
cd src/main/java
javac *.java
```
3. 运行示例:
```
java Factory
```
## 设计优点
1. **封装性**:客户端不需要知道产品的创建细节
2. **解耦**:客户端与具体产品类解耦
3. **易维护**:如果需要修改产品创建逻辑,只需修改工厂类
## 适用场景
- 工厂类负责创建的对象比较少
- 客户端只关心传入工厂的参数,不关心如何创建对象的细节
## 注意事项
- 简单工厂模式不符合开闭原则(对扩展开放,对修改关闭)
- 如果需要添加新的产品类型,需要修改工厂类中的代码
- 对于复杂的产品创建场景,可能需要考虑使用工厂方法模式或抽象工厂模式
=======
# one # one
7e3e4c3fca0a0772a700865baa2e1e6705e6a521

@ -0,0 +1,6 @@
public class ConcreteProductA implements Product {
@Override
public void operation() {
System.out.println("ConcreteProductA operation");
}
}

@ -0,0 +1,6 @@
public class ConcreteProductB implements Product {
@Override
public void operation() {
System.out.println("ConcreteProductB operation");
}
}

@ -0,0 +1,24 @@
public class Factory {
public static Product createProduct(String type) {
if (type == null) {
return null;
}
if (type.equalsIgnoreCase("A")) {
return new ConcreteProductA();
} else if (type.equalsIgnoreCase("B")) {
return new ConcreteProductB();
}
return null;
}
// 添加测试方法
public static void main(String[] args) {
// 创建产品A
Product productA = Factory.createProduct("A");
productA.operation();
// 创建产品B
Product productB = Factory.createProduct("B");
productB.operation();
}
}

@ -0,0 +1,3 @@
public interface Product {
void operation();
}
Loading…
Cancel
Save