面试题答案
一键面试1. 策略模式重构订单支付模块
- 分析:订单支付可能有多种方式,如支付宝支付、微信支付等,使用策略模式可以将不同支付方式封装成独立的策略类,降低与订单处理系统其他模块的耦合度。
- 关键代码示例:
- 定义支付策略接口:
public interface IPaymentStrategy
{
void Pay(decimal amount);
}
- **具体支付策略类(以支付宝支付为例)**:
public class AlipayStrategy : IPaymentStrategy
{
public void Pay(decimal amount)
{
Console.WriteLine($"使用支付宝支付{amount}元");
}
}
- **订单类中使用支付策略**:
public class Order
{
private IPaymentStrategy paymentStrategy;
public Order(IPaymentStrategy paymentStrategy)
{
this.paymentStrategy = paymentStrategy;
}
public void PayOrder(decimal amount)
{
paymentStrategy.Pay(amount);
}
}
- **使用示例**:
class Program
{
static void Main()
{
IPaymentStrategy alipay = new AlipayStrategy();
Order order = new Order(alipay);
order.PayOrder(100m);
}
}
2. 观察者模式重构订单发货模块
- 分析:当订单支付成功后,可能需要通知多个模块进行发货操作等,使用观察者模式可以实现松耦合的通知机制。
- 关键代码示例:
- 定义主题接口:
public interface ISubject
{
void Attach(IObserver observer);
void Detach(IObserver observer);
void Notify();
}
- **定义观察者接口**:
public interface IObserver
{
void Update();
}
- **订单主题类**:
public class OrderSubject : ISubject
{
private List<IObserver> observers = new List<IObserver>();
private bool isPaid = false;
public void Attach(IObserver observer)
{
observers.Add(observer);
}
public void Detach(IObserver observer)
{
observers.Remove(observer);
}
public void Notify()
{
if (isPaid)
{
foreach (var observer in observers)
{
observer.Update();
}
}
}
public void PayOrder()
{
isPaid = true;
Notify();
}
}
- **发货观察者类**:
public class ShippingObserver : IObserver
{
public void Update()
{
Console.WriteLine("订单已支付,准备发货");
}
}
- **使用示例**:
class Program
{
static void Main()
{
OrderSubject orderSubject = new OrderSubject();
ShippingObserver shippingObserver = new ShippingObserver();
orderSubject.Attach(shippingObserver);
orderSubject.PayOrder();
}
}
通过上述策略模式和观察者模式的运用,可以有效降低订单处理系统不同功能模块之间的耦合度,提高代码的可扩展性和可维护性。