电商的物流系统可以陆地运输,也可以海上运输,陆地运输使用卡车运输货物,海上运输使用轮船运输货物,使用工厂方法模式实现此需求
时间: 2024-10-24 16:04:31 浏览: 13
在电商的物流系统中,如果需要支持陆地运输和海上运输两种不同的交付方式,我们可以使用工厂方法模式(Factory Method Pattern)。这个设计模式允许我们创建一系列相关的类,同时将它们的实例化过程推迟到子类中,这样可以根据具体的需求动态选择合适的运输方式。
首先,我们需要创建一个抽象的运输接口`Transport`:
```java
public abstract class Transport {
public abstract void deliver(Goods goods);
}
// 具体实现:卡车运输
public class TruckTransport extends Transport {
@Override
public void deliver(Goods goods) {
System.out.println("Using truck to deliver " + goods.getName());
}
}
// 具体实现:轮船运输
public class ShipTransport extends Transport {
@Override
public void deliver(Goods goods) {
System.out.println("Using ship to deliver " + goods.getName());
}
}
```
然后,创建一个物流工厂类`LogisticsFactory`,它包含一个创建运输对象的方法,根据类型决定使用哪种具体的运输方式:
```java
public class LogisticsFactory {
public static Transport createTransport(String type) {
if (type.equalsIgnoreCase("truck")) {
return new TruckTransport();
} else if (type.equalsIgnoreCase("ship")) {
return new ShipTransport();
} else {
throw new IllegalArgumentException("Invalid transport type");
}
}
}
```
最后,在物流系统的主体部分,可以根据需要从工厂获取适当的运输对象并调用其配送方法:
```java
public class LogisticsSystem {
private Transport transport;
public void setTransport(Transport transport) {
this.transport = transport;
}
public void deliverGoods(Goods goods) {
transport.deliver(goods);
}
// 使用示例
public static void main(String[] args) {
LogisticsSystem system = new LogisticsSystem();
system.setTransport(LogisticsFactory.createTransport("truck")); // 卡车运输
system.deliverGoods(new Goods("Product A")); // 输出:Using truck to deliver Product A
system.setTransport(LogisticsFactory.createTransport("ship")); // 轮船运输
system.deliverGoods(new Goods("Product B")); // 输出:Using ship to deliver Product B
}
}
```
通过这种方式,我们可以保持物流系统的灵活性,当需要添加新的运输方式时,只需要新增一个子类即可,无需修改现有的核心物流系统代码。
阅读全文