当前位置: 首页 > article >正文

设计模式 在SCM系统的应用场景介绍

文兴快码

在供应链管理(SCM)系统中,设计模式的应用对于提高系统的可维护性、可扩展性和灵活性至关重要。以下是一些在SCM系统中常见的设计模式及其应用场景:

1. 工厂模式(Factory Pattern)

应用场景

  • 在SCM系统中,经常需要创建不同类型的对象,如订单、库存项、供应商等。使用工厂模式可以根据不同的参数动态创建这些对象,而无需在代码中硬编码具体的类名。

  • 例如,可以创建一个OrderFactory来根据订单类型生成不同类型的订单对象。

2. 单例模式(Singleton Pattern)

应用场景

  • SCM系统中某些资源或配置在整个系统生命周期内只需要一个实例,如配置管理、日志记录器、数据库连接池等。使用单例模式可以确保这些资源只被初始化一次,并提供全局访问点。

  • 例如,可以创建一个DatabaseConnection单例类来管理数据库连接。

3. 观察者模式(Observer Pattern)

应用场景

  • 当SCM系统中的某个对象状态发生变化时(如库存水平变化、订单状态更新等),需要通知其他对象或组件。观察者模式允许对象之间松耦合地通信。

  • 例如,当库存水平低于某个阈值时,可以通知采购部门补货。

4. 策略模式(Strategy Pattern)

应用场景

  • SCM系统中可能需要根据不同的策略来处理订单、库存管理等业务流程。策略模式允许在运行时动态地选择算法或行为。

  • 例如,可以根据不同的配送策略(如最快配送、最经济配送)来处理订单配送。

5. 模板方法模式(Template Method Pattern)

应用场景

  • SCM系统中某些业务流程(如订单处理、库存管理)可能包含一系列固定的步骤,但某些步骤的具体实现可能因业务规则或产品类型的不同而有所差异。模板方法模式定义了一个算法的骨架,将某些步骤延迟到子类中实现。

  • 例如,可以定义一个OrderProcessingTemplate类,其中包含处理订单的固定步骤,但具体的库存扣减、支付处理等步骤可以在子类中实现。

6. 适配器模式(Adapter Pattern)

应用场景

  • 当SCM系统需要与外部系统(如ERP系统、物流系统)集成时,可能会遇到接口不兼容的问题。适配器模式允许将一个类的接口转换成客户端期望的另一个接口。

  • 例如,可以创建一个适配器类来将SCM系统的订单接口转换为ERP系统可以理解的格式。

7. 装饰者模式(Decorator Pattern)

应用场景

  • 在SCM系统中,可能需要为某些对象动态地添加额外的职责,而无需修改这些对象的代码。装饰者模式允许向一个现有的对象添加新的功能,同时又不改变其结构。

  • 例如,可以为订单对象添加一个装饰器来添加折扣计算功能,而无需修改订单类的代码。

8. 代理模式(Proxy Pattern)

应用场景

  • 在SCM系统中,某些对象可能直接访问会有性能问题或安全限制。代理模式为其他对象提供一个代理或占位符,以控制对这个对象的访问。

  • 例如,可以创建一个库存代理类来限制对库存系统的直接访问,以提高性能和安全性。

这些设计模式在SCM系统中的应用可以显著提高系统的灵活性、可维护性和可扩展性,帮助开发人员更好地应对复杂的供应链管理需求。

通义灵码

设计模式在 SCM(供应链管理)系统中同样扮演着重要的角色,可以帮助开发人员更好地组织代码、提高系统的可维护性和扩展性。以下是一些常见的设计模式及其在 SCM 系统中的应用场景:

1. 单例模式(Singleton Pattern)

  • 应用场景:确保某个类只有一个实例,并提供一个全局访问点。
  • 实现:例如,数据库连接池、日志记录器、配置管理类等。这些类在整个系统中只需要一个实例,以避免资源浪费和数据不一致的问题。
  • 示例
     

    java

    public class DatabaseConnectionPool { private static DatabaseConnectionPool instance; private List<Connection> connections; private DatabaseConnectionPool() { connections = new ArrayList<>(); // 初始化连接池 } public static DatabaseConnectionPool getInstance() { if (instance == null) { synchronized (DatabaseConnectionPool.class) { if (instance == null) { instance = new DatabaseConnectionPool(); } } } return instance; } public Connection getConnection() { // 获取连接 } public void releaseConnection(Connection connection) { // 释放连接 } }

2. 工厂方法模式(Factory Method Pattern)

  • 应用场景:定义一个创建对象的接口,让子类决定实例化哪一个类。
  • 实现:例如,创建不同类型的订单、库存记录、运输单等。工厂方法模式可以让系统更灵活地扩展,增加新的订单类型时,只需添加新的工厂类。
  • 示例
     

    java

    public interface Order { void process(); } public class PurchaseOrder implements Order { @Override public void process() { System.out.println("Processing purchase order"); } } public class SalesOrder implements Order { @Override public void process() { System.out.println("Processing sales order"); } } public abstract class OrderFactory { public abstract Order createOrder(); } public class PurchaseOrderFactory extends OrderFactory { @Override public Order createOrder() { return new PurchaseOrder(); } } public class SalesOrderFactory extends OrderFactory { @Override public Order createOrder() { return new SalesOrder(); } }

3. 抽象工厂模式(Abstract Factory Pattern)

  • 应用场景:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。
  • 实现:例如,创建不同类型的订单、库存记录、运输单等。抽象工厂模式可以确保这些对象之间的兼容性和一致性。
  • 示例
     

    java

    public interface OrderFactory { Order createOrder(); InventoryRecord createInventoryRecord(); } public class DomesticOrderFactory implements OrderFactory { @Override public Order createOrder() { return new DomesticOrder(); } @Override public InventoryRecord createInventoryRecord() { return new DomesticInventoryRecord(); } } public class InternationalOrderFactory implements OrderFactory { @Override public Order createOrder() { return new InternationalOrder(); } @Override public InventoryRecord createInventoryRecord() { return new InternationalInventoryRecord(); } }

4. 建造者模式(Builder Pattern)

  • 应用场景:将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
  • 实现:例如,构建复杂的订单、库存记录等。建造者模式可以使构建过程更加清晰和可控,减少代码的重复。
  • 示例
     

    java

    public class Order { private String orderId; private String customerName; private List<Item> items; public static class Builder { private Order order = new Order(); public Builder withOrderId(String orderId) { order.orderId = orderId; return this; } public Builder withCustomerName(String customerName) { order.customerName = customerName; return this; } public Builder addItem(Item item) { if (order.items == null) { order.items = new ArrayList<>(); } order.items.add(item); return this; } public Order build() { return order; } } // Getters and setters }

5. 观察者模式(Observer Pattern)

  • 应用场景:定义对象之间的一对多依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都会得到通知并自动更新。
  • 实现:例如,当库存水平发生变化时,通知相关的采购部门、销售部门等。观察者模式可以实现松耦合的事件驱动机制。
  • 示例
     

    java

    import java.util.ArrayList; import java.util.List; public interface Observer { void update(String message); } public class InventoryLevelNotifier { private List<Observer> observers = new ArrayList<>(); public void addObserver(Observer observer) { observers.add(observer); } public void removeObserver(Observer observer) { observers.remove(observer); } public void notifyObservers(String message) { for (Observer observer : observers) { observer.update(message); } } } public class ProcurementDepartment implements Observer { @Override public void update(String message) { System.out.println("Procurement department received notification: " + message); } } public class SalesDepartment implements Observer { @Override public void update(String message) { System.out.println("Sales department received notification: " + message); } }

6. 责任链模式(Chain of Responsibility Pattern)

  • 应用场景:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。
  • 实现:例如,审批流程、权限管理等。责任链模式可以将请求沿着一条链传递,直到有对象处理为止,使得系统更加灵活和可扩展。
  • 示例
     

    java

    public abstract class Approver { protected Approver nextApprover; public void setNextApprover(Approver nextApprover) { this.nextApprover = nextApprover; } public abstract void processRequest(PurchaseRequest request); } public class Manager extends Approver { @Override public void processRequest(PurchaseRequest request) { if (request.getAmount() <= 10000) { System.out.println("Manager approved the request"); } else if (nextApprover != null) { nextApprover.processRequest(request); } } } public class Director extends Approver { @Override public void processRequest(PurchaseRequest request) { if (request.getAmount() <= 50000) { System.out.println("Director approved the request"); } else if (nextApprover != null) { nextApprover.processRequest(request); } } } public class CEO extends Approver { @Override public void processRequest(PurchaseRequest request) { System.out.println("CEO approved the request"); } }

7. 策略模式(Strategy Pattern)

  • 应用场景:定义一系列算法,把它们一个个封装起来,并且使它们可以互相替换。
  • 实现:例如,不同的运输策略、定价策略、库存管理策略等。策略模式可以使算法的变化独立于使用算法的客户。
  • 示例
     

    java

    public interface ShippingStrategy { double calculateShippingCost(double weight); } public class StandardShipping implements ShippingStrategy { @Override public double calculateShippingCost(double weight) { return weight * 1.5; } } public class ExpressShipping implements ShippingStrategy { @Override public double calculateShippingCost(double weight) { return weight * 2.5; } } public class Order { private ShippingStrategy shippingStrategy; public Order(ShippingStrategy shippingStrategy) { this.shippingStrategy = shippingStrategy; } public double calculateTotalCost(double weight) { return 100 + shippingStrategy.calculateShippingCost(weight); } }

8. 模板方法模式(Template Method Pattern)

  • 应用场景:定义一个操作中的算法骨架,而将一些步骤延迟到子类中。使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
  • 实现:例如,订单处理流程、库存更新流程等。模板方法模式可以确保流程的基本结构不变,同时允许子类自定义具体步骤。
  • 示例
     

    java

    public abstract class OrderProcessor { public final void processOrder(Order order) { validateOrder(order); prepareOrder(order); shipOrder(order); } protected abstract void validateOrder(Order order); protected abstract void prepareOrder(Order order); protected abstract void shipOrder(Order order); } public class DomesticOrderProcessor extends OrderProcessor { @Override protected void validateOrder(Order order) { System.out.println("Validating domestic order"); } @Override protected void prepareOrder(Order order) { System.out.println("Preparing domestic order"); } @Override protected void shipOrder(Order order) { System.out.println("Shipping domestic order"); } } public class InternationalOrderProcessor extends OrderProcessor { @Override protected void validateOrder(Order order) { System.out.println("Validating international order"); } @Override protected void prepareOrder(Order order) { System.out.println("Preparing international order"); } @Override protected void shipOrder(Order order) { System.out.println("Shipping international order"); } }

9. 装饰者模式(Decorator Pattern)

  • 应用场景:动态地给一个对象添加一些额外的职责。就增加功能来说,装饰者模式相比生成子类更为灵活。
  • 实现:例如,为订单添加不同的属性、功能、标签等。装饰者模式可以在运行时动态地增强对象的功能,而不改变其原有结构。
  • 示例
     

    java

    public interface Order { void process(); } public class BasicOrder implements Order { @Override public void process() { System.out.println("Processing basic order"); } } public abstract class OrderDecorator implements Order { protected Order decoratedOrder; public OrderDecorator(Order decoratedOrder) { this.decoratedOrder = decoratedOrder; } @Override public void process() { decoratedOrder.process(); } } public class PriorityOrderDecorator extends OrderDecorator { public PriorityOrderDecorator(Order decoratedOrder) { super(decoratedOrder); } @Override public void process() { System.out.println("Processing priority order"); super.process(); } }

10. 适配器模式(Adapter Pattern)

  • 应用场景:将一个类的接口转换成客户希望的另一个接口。适配器模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。
  • 实现:例如,集成第三方物流系统、旧系统与新系统的对接等。适配器模式可以解决不同系统或组件之间的兼容性问题。
  • 示例
     

    java

    public interface ThirdPartyLogistics { void shipOrder(); } public class LegacyLogistics { public void sendOrder() { System.out.println("Legacy logistics system sending order"); } } public class LogisticsAdapter implements ThirdPartyLogistics { private LegacyLogistics legacyLogistics; public LogisticsAdapter(LegacyLogistics legacyLogistics) { this.legacyLogistics = legacyLogistics; } @Override public void shipOrder() { legacyLogistics.sendOrder(); } }

11. 代理模式(Proxy Pattern)

  • 应用场景:为其他对象提供一种代理以控制对这个对象的访问。
  • 实现:例如,访问控制、缓存、日志记录等。代理模式可以在不修改原对象的情况下,增加额外的功能或控制。
  • 示例
     

    java

    public interface OrderService { void placeOrder(Order order); } public class RealOrderService implements OrderService { @Override public void placeOrder(Order order) { System.out.println("Placing order: " + order.getOrderId()); } } public class OrderServiceProxy implements OrderService { private RealOrderService realOrderService; public OrderServiceProxy(RealOrderService realOrderService) { this.realOrderService = realOrderService; } @Override public void placeOrder(Order order) { if (checkAccess()) { realOrderService.placeOrder(order); logAccess(); } else { System.out.println("Access denied"); } } private boolean checkAccess() { // 检查访问权限 return true; } private void logAccess() { // 记录访问日志 System.out.println("Access logged"); } }

12. 组合模式(Composite Pattern)

  • 应用场景:将对象组合成树形结构以表示“部分-整体”的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。
  • 实现:例如,供应链网络、库存层次结构等。组合模式可以简化客户端代码,使其更容易处理复杂的数据结构。
  • 示例
     

    java

    public interface SupplyNode { void add(SupplyNode node); void remove(SupplyNode node); void display(int depth); } public class Supplier implements SupplyNode { private String name; public Supplier(String name) { this.name = name; } @Override public void add(SupplyNode node) { // 不支持 } @Override public void remove(SupplyNode node) { // 不支持 } @Override public void display(int depth) { System.out.println(String.join("", Collections.nCopies(depth, "-")) + name); } } public class SupplyChain implements SupplyNode { private String name; private List<SupplyNode> children = new ArrayList<>(); public SupplyChain(String name) { this.name = name; } @Override public void add(SupplyNode node) { children.add(node); } @Override public void remove(SupplyNode node) { children.remove(node); } @Override public void display(int depth) { System.out.println(String.join("", Collections.nCopies(depth, "-")) + name); for (SupplyNode child : children) { child.display(depth + 2); } } }

13. 命令模式(Command Pattern)

  • 应用场景:将一个请求封装为一个对象,从而使用户可以用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
  • 实现:例如,操作日志、事务管理、命令执行等。命令模式可以将请求的发起者和执行者解耦,提高系统的灵活性和可扩展性。
  • 示例
     

    java

    public interface Command { void execute(); } public class PlaceOrderCommand implements Command { private OrderService orderService; private Order order; public PlaceOrderCommand(OrderService orderService, Order order) { this.orderService = orderService; this.order = order; } @Override public void execute() { orderService.placeOrder(order); } } public class OrderInvoker { private List<Command> commands = new ArrayList<>(); public void addCommand(Command command) { commands.add(command); } public void processCommands() { for (Command command : commands) { command.execute(); } } }

14. 备忘录模式(Memento Pattern)

  • 应用场景:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
  • 实现:例如,版本控制、撤销操作等。备忘录模式可以实现对象状态的备份和恢复,提高系统的可靠性。
  • 示例
     

    java

    public class Order { private String orderId; private String customerName; private List<Item> items; public Memento saveState() { return new Memento(orderId, customerName, new ArrayList<>(items)); } public void restoreState(Memento memento) { this.orderId = memento.orderId; this.customerName = memento.customerName; this.items = memento.items; } // Getters and setters } public class Memento { private String orderId; private String customerName; private List<Item> items; public Memento(String orderId, String customerName, List<Item> items) { this.orderId = orderId; this.customerName = customerName; this.items = items; } } public class Caretaker { private List<Memento> mementos = new ArrayList<>(); public void addMemento(Memento memento) { mementos.add(memento); } public Memento getMemento(int index) { return mementos.get(index); } }

15. 访问者模式(Visitor Pattern)

  • 应用场景:表示一个作用于某对象结构中的各元素的操作。它使你可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
  • 实现:例如,数据报表生成、审计日志记录等。访问者模式可以将数据结构和数据操作分离,使得系统更加灵活和可扩展。
  • 示例
     

    java

    public interface Element { void accept(Visitor visitor); } public class Order implements Element { private String orderId; private String customerName; @Override public void accept(Visitor visitor) { visitor.visit(this); } // Getters and setters } public class InventoryRecord implements Element { private String productId; private int quantity; @Override public void accept(Visitor visitor) { visitor.visit(this); } // Getters and setters }


http://www.kler.cn/a/429139.html

相关文章:

  • Navicat 17 功能简介 | 商业智能 BI
  • C语言进阶习题【1】指针和数组(3)——一维指针指向字符数组首元素地址
  • 蓝桥杯 Python 组知识点容斥原理
  • idea 如何安装 github copilot
  • 如何保证光谱相机的稳定性和可靠性
  • 深入了解卷积神经网络(CNN):图像处理与深度学习的革命性技术
  • ISO45001职业健康安全管理体系认证流程
  • springboot整合lua脚本在Redis实现商品库存扣减
  • 关系型数据库(RDBMS)和非关系型数据库(NoSQL)
  • 使用 Trace 实现 onnx 的导出 - 学习记录
  • golang学习,小结
  • 数学公式和科学符号在页面的展示方法
  • 去除背景 学习笔记
  • PCB设计规范
  • 运维监控grafana+prometheus+node_exporter(or mysqld_exporter)
  • 手动将MJPEG图片,转成MP4文件格式
  • centOS7如何配置阿里云或者腾讯云yum源
  • 【Linux】搭建临时HTTP文件传输服务器
  • uniapp支持App横竖屏开发总结
  • iPhone 17 Air基本确认,3个大动作
  • 嵌入式学习——进程间通信方式(5)—— 信号量
  • 22. 五子棋小游戏
  • 阿里云PolarDB 如何进行数据恢复,文档总结
  • 【Qt】QMainWindow、QWidget和QDialog的区别?
  • Oracle 19C RU补丁升级,从19.7to19.25 -单机
  • 5G模组AT命令脚本-关闭模组的IP过滤功能