简单工厂模式uml图
时间: 2024-06-05 14:05:08 浏览: 18
简单工厂模式(Simple Factory Pattern)是一种创建型设计模式,它提供了一种创建对象的最佳方式,而无需指定具体的类。在UML图中,这种模式通常会包括以下组件:
1. **抽象产品(Abstract Product)**:这是接口或抽象类,定义了所有可能的产品共有的行为和属性。在UML图中,这表现为一个带有虚方法的类或者接口。
2. **具体产品(Concrete Products)**:这些是实现抽象产品接口的具体类,每个具体产品代表一个具体的子类或实现。
3. **工厂方法(Factory Method)**:这是一个静态方法,属于一个单独的工厂类,它负责根据条件或参数返回适当的具体产品实例。这个方法通常声明在抽象产品类中,但也可以是一个独立的辅助类。
4. **工厂类(Factory Class)**:它包含了工厂方法,根据输入参数决定创建哪种具体产品,并返回该产品的实例。
**UML图示例**:
- **用例视图(Use Case Diagram)**:展示客户端如何使用简单工厂模式,可能会有一个“请求产品”或“创建对象”的场景。
- **类图(Class Diagram)**:显示抽象产品、具体产品和工厂类之间的关系,箭头从工厂类指向具体产品,表示创建关系。
相关问题
设计模式工厂方法uml简单工厂模式uml
工厂方法模式和简单工厂模式都是创建型设计模式,用于解耦对象的创建和使用。
简单工厂模式通过一个工厂类来创建不同类型的对象,客户端只需要知道需要什么类型的对象即可,而无需关心具体的实现细节。简单工厂模式的UML类图如下:
![简单工厂模式UML](https://img-blog.csdn.net/20170602103102277?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfNzgzNjA3MjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)
工厂方法模式将简单工厂模式中的工厂类抽象成了一个抽象工厂接口,每个具体的产品类都有自己对应的工厂类,客户端通过调用具体的工厂类来创建对应的产品。这样,当新增一种产品时,只需要新增一个具体的产品类和对应的工厂类即可,无需修改原有代码。工厂方法模式的UML类图如下:
![工厂方法模式UML](https://img-blog.csdn.net/20170602105249133?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcXFfNzgzNjA3MjM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/q/70)
简单工厂模式uml类图常用例子水果
简单工厂模式是一种创建型设计模式,它提供了一个创建对象的最佳方式,但不暴露创建逻辑。在UML类图中,通常会用到一个"工厂"类来隐藏具体对象的创建细节,并返回相应的对象实例。这里以水果为主题,我们可以构建一个简单的示例:
1. **FruitFactory** (工厂类):这个类定义了一个静态方法或工厂方法,用于创建不同类型的水果对象。
```java
public class FruitFactory {
public static IFruit createFruit(String type) {
if (type.equals("Apple")) {
return new Apple();
} else if (type.equals("Banana")) {
return new Banana();
} else if (type.equals("Orange")) {
return new Orange();
}
// 可能添加默认处理或异常处理
throw new IllegalArgumentException("Invalid fruit type");
}
}
```
2. **IFruit** (接口):定义了所有水果的通用行为,比如"吃"。
```java
public interface IFruit {
void eat();
}
```
3. **Apple**、**Banana** 和 **Orange** (具体类):每个类都实现了IFruit接口,代表具体的水果类型。
```java
public class Apple implements IFruit {
@Override
public void eat() {
System.out.println("Eating an apple");
}
}
public class Banana implements IFruit {
@Override
public void eat() {
System.out.println("Eating a banana");
}
}
public class Orange implements IFruit {
@Override
public void eat() {
System.out.println("Eating an orange");
}
}
```
相关推荐
![application/msword](https://img-home.csdnimg.cn/images/20210720083327.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)