首页 > 解决方案 > Java中的设计模式和OOP原理

问题描述

要解决的问题:

“有几种类型的会计服务订单。这些订单的当前解决方案是为每种类型创建一个新类(基于工作类型,例如审计或日常工作,订单是否针对优先客户,以及是否订单是一次性或定期安排的工作)。整个系统有 66 * 2 * 2 个这些类(264 个订单类!),其中 8 个(2*2*2)提供给您作为示例 – CPA希望您找到一种方法来减少此类负载,而不会破坏现有的 Order 接口。”

与问题相关的代码:

 if (isScheduled) {
  if (1 == orderType) { 
    if (isCritical) {
      order =
          new FirstOrderTypeScheduled(
              id, clientID, date, criticalLoading, maxCountedEmployees, numQuarters);
    } else {
      order = new Order66Scheduled(id, clientID, date, maxCountedEmployees, numQuarters);
    }
  } else if (2 == orderType) { // 2 is audit
    if (isCritical) {
      order = new CriticalAuditOrderScheduled(id, clientID, date, criticalLoading, numQuarters);
    } else {
      order = new NewOrderImplScheduled(id, clientID, date, numQuarters);
    }
  } else {
    return null;
  }
} else {
  if (1 == orderType) {
    if (isCritical) {
      order = new FirstOrderType(id, clientID, date, criticalLoading, maxCountedEmployees);
    } else {
      order = new Order66(id, clientID, date, maxCountedEmployees);
    }
  } else if (2 == orderType) {
    if (isCritical) {
      order = new CriticalAuditOrder(id, clientID, date, criticalLoading);
    } else {
      order = new NewOrderImpl(id, clientID, date);
    }
  } else {
    return null;
  }
}

因此,上述问题中指出了几种类型的类(8 类)。我想问的是,在设计原则和 OO 设计原则(SOLID)中,有没有我应该应用的方法来解决上述问题?(我正在考虑使用桥接模式)

提前致谢!

标签: javaoopdesign-patterns

解决方案


可能对您有所帮助的创造型设计模式是工厂和建造者。

如果你有一个接口(比如说 IOrder)和多个实现,你可以使用工厂模式:

您将有一个 OrderFactory 类,它将根据一些参数创建订单,它可以是这样的:

public class OrderFactory {

   public IOrder createOrder( boolean isScheduled, int orderType, boolean isCritical){
      // here will be the logic from your post and the order will be returned
   }

}

使用工厂模式,您还可以拥有多个嵌套工厂,我认为您的示例可能就是这种情况 - 这称为抽象工厂。这更复杂,您可以在此处查看示例: https ://www.geeksforgeeks.org/abstract-factory-pattern/


推荐阅读