Which Edits Reduce Coupling

OrderService currently does new SmtpMailer() inside confirm(), and reads order.status, order.total and order.lines through getters to decide whether to bill. Order is a plain data holder: 12 public getters and setters, one pair per field, and no behavior of its own.

More than one of the following reduces coupling. Select every one that does.

A

Add an IOrderService interface whose only implementation is OrderService.

B

Replace the constructor parameter with ServiceLocator.get(Mailer.class) called inside confirm().

C

Trim Order's 12 public getters and setters down to the operations its callers actually need.

D

Replace new SmtpMailer() inside confirm() with a Mailer accepted as a constructor parameter.

E

Move the order.status == PAID && order.total > 0 test out of OrderService and onto Order as isBillable().

F

Make OrderService a singleton so no caller has to construct it.