在上一道题目的基础上,假定康师傅工厂需要添加生产饮用水的业务,白象工厂也要添加生产饮用水的业务,请采用抽象工厂设计模型进行重新设计。(1)画出UML类图;(2)写出相关源码。
时间: 2024-10-28 17:10:30 浏览: 29
中台之上:商业银行业务架构设计
在采用抽象工厂设计模式处理这种情况时,我们首先创建一组相关的抽象产品类,然后提供一个抽象工厂来创建这些产品。对于生产饮用水的业务,我们可以这样设计:
1. **UML 类图**:
- **抽象产品A (WaterProduct)**: 表示抽象的饮用水产品,可能有基础特性如品牌、容量等。
- **具体产品A_1 (MasterKongWater)**: 康师傅生产的饮用水实现,特定于康师傅的品牌和规格。
- **具体产品A_2 (BaixiangWater)**: 白象生产的饮用水实现,特定于白象的品牌和规格。
- **抽象工厂 (WaterFactory)**: 提供创建所有水产品的接口。
- **具体工厂1 (MaShuangFangFactory)**: 实现康师傅工厂的抽象工厂,负责生产 MasterKongWater。
- **具体工厂2 (BaiXiangFangFactory)**: 实现白象工厂的抽象工厂,负责生产 BaixiangWater。
在 UML 中,这些类之间的关系可以表现为继承、关联和依赖,例如具体工厂继承自抽象工厂,它们都包含对相应产品的引用。
![](https://i.imgur.com/OaJ9ZfP.png)
2. **伪代码/源码**(这里假设使用 Java 编程语言):
```java
// 抽象产品
public abstract class WaterProduct {
public abstract String getBrand();
}
// 具体产品
public class MasterKongWater extends WaterProduct {
@Override
public String getBrand() {
return "康师傅";
}
}
public class BaiXiangWater extends WaterProduct {
@Override
public String getBrand() {
return "白象";
}
}
// 抽象工厂
public interface WaterFactory {
WaterProduct createProduct();
}
// 具体工厂
public class MaShuangFangFactory implements WaterFactory {
@Override
public WaterProduct createProduct() {
return new MasterKongWater();
}
}
public class BaiXiangFangFactory implements WaterFactory {
@Override
public WaterProduct createProduct() {
return new BaiXiangWater();
}
}
// 康师傅工厂和白象工厂实例化
MaShuangFangFactory kfcFactory = new MaShuangFangFactory();
BaiXiangFangFactory baxiangFactory = new BaiXiangFangFactory();
// 创建并使用产品
WaterProduct kfcWater = kfcFactory.createProduct();
System.out.println(kfcWater.getBrand()); // 输出:康师傅
WaterProduct baxiangWater = baxiangFactory.createProduct();
System.out.println(baxiangWater.getBrand()); // 输出:白象
阅读全文