闽公网安备 35020302035485号
3.调用方根据参数来调用对应的对象。

// 堆代码 duidaima.com
// 支付接口
public interface Pay {
void pay();
}
// 支付宝支付
public class AliPay implements Pay{
@Override
public void pay() {
System.out.println("支付宝支付 .....");
}
}
// 微信支付
public class WechatPay implements Pay{
@Override
public void pay() {
System.out.println("微信支付 .....");
}
}

public void order(int payType) {
// 创建订单
// 省略代码......
// 根据type 调用不同的支付
Pay pay;
if (payType == 1) {
pay = new AliPay();
} else {
pay = new WechatPay();
}
// 调用支付
pay.pay();
// 更新状态 代码省略.....
}
以上代码耦合度很高,有以下几个缺点:3.难以扩展和修改,后续添加新的支付方法,或者更修支付方式,需要在多个地方修改代码,增加代码的维护成本。
// 支付工厂类
public class PayFactory {
public static Pay getPay(int payType) {
Pay pay;
if (payType == 1) {
pay = new AliPay();
} else {
pay = new WechatPay();
}
return pay;
}
}
经过重构之后的 order 方法,支付直接调用 PayFactory 工厂类,代码「逻辑更加清晰,可读性也更强了」:public void order2(int payType) {
// 创建订单
// 省略代码......
// 根据type 调用不同的支付
Pay pay = PayFactory.getPay(payType);
// 调用支付
pay.pay();
// 更新状态 代码省略.....
}

