要解决的问题:
“会计服务订单有几种类型。这些订单的当前解决方案是为每种类型创建一个新类(基于工作类型(例如审计或日常工作),该订单是否用于优先客户,以及(整个订单有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)中,是否应该使用一种方法来解决上述问题?(我正在考虑使用桥接模式)
提前致谢!
可能对您有帮助的创新设计模式是“工厂”和“建造者”。
如果您有一个接口(例如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
}
}
使用Factory模式,您还可以具有多个嵌套工厂,我认为在您的示例中可能是这种情况-这称为抽象工厂。这更加复杂,您可以在此处查看示例:https : //www.geeksforgeeks.org/abstract-factory-pattern/
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句