某单据管理系统中要求实现对采购、销售、库存的单据管理,系统的采购类的单据中有如采购单、收货单、应付帐单、付款单和退货单等,现使用抽象工厂方法设计模式设计该系统1、画出UML类图 2、实现代码
时间: 2023-12-28 22:19:04 浏览: 225
抽象工厂方法设计模式是一种工厂方法的扩展,其目的是提供一个创建一系列相关或依赖对象的接口,而无需指定它们具体的类。在这个问题中,我们可以在采购、销售和库存这三个类别中实现一个抽象工厂,它们都可以生产不同的单据类型。UML类图如下:
![UML类图](https://img-blog.csdn.net/20160304174104181)
首先,我们需要有一个抽象的单据工厂类,来定义不同单据的创建方法。然后,我们需要分别实现采购、销售和库存类别的工厂类,每个工厂类分别负责生产对应类别的单据。最后,我们需要实现每种单据的具体类。
```java
// 抽象的单据工厂类
public abstract class BillFactory {
public abstract PurchaseBill createPurchaseBill();
public abstract SalesBill createSalesBill();
public abstract InventoryBill createInventoryBill();
}
// 采购类别的单据工厂类
public class PurchaseBillFactory extends BillFactory {
public PurchaseBill createPurchaseBill() {
return new PurchaseBill();
}
public SalesBill createSalesBill() {
return null;
}
public InventoryBill createInventoryBill() {
return null;
}
}
// 销售类别的单据工厂类
public class SalesBillFactory extends BillFactory {
public PurchaseBill createPurchaseBill() {
return null;
}
public SalesBill createSalesBill() {
return new SalesBill();
}
public InventoryBill createInventoryBill() {
return null;
}
}
// 库存类别的单据工厂类
public class InventoryBillFactory extends BillFactory {
public PurchaseBill createPurchaseBill() {
return null;
}
public SalesBill createSalesBill() {
return null;
}
public InventoryBill createInventoryBill() {
return new InventoryBill();
}
}
// 具体的采购单据
public class PurchaseBill {
// TODO: 实现采购单据的相关逻辑
}
// 具体的销售单据
public class SalesBill {
// TODO: 实现销售单据的相关逻辑
}
// 具体的库存单据
public class InventoryBill {
// TODO: 实现库存单据的相关逻辑
}
```
现在,我们可以通过不同的单据工厂类来创建不同的单据类型,并且每个工厂类只生产对应类别的单据。例如,通过采购单据工厂类来创建采购单、收货单、应付账单、付款单和退货单等采购类的单据。
```java
BillFactory factory = new PurchaseBillFactory();
PurchaseBill purchaseBill = factory.createPurchaseBill();
// TODO: 使用采购单做一些操作
ReceivingBill receivingBill = factory.createReceivingBill();
// TODO: 使用收货单做一些操作
PayableBill payableBill = factory.createPayableBill();
// TODO: 使用应付账单做一些操作
PaymentBill paymentBill = factory.createPaymentBill();
// TODO: 使用付款单做一些操作
ReturnBill returnBill = factory.createReturnBill();
// TODO: 使用退货单做一些操作
```
当我们需要添加新的单据类型时,只需实现对应的单据类和工厂类即可,不会影响到整个系统的架构。抽象工厂方法可以让我们更加灵活高效地设计和维护系统。