关于工厂方法的一些理解
本文最后更新于7 天前,其中的信息可能已经过时,如有错误请发送邮件到big_fw@foxmail.com

I.静态工厂方法:


核心目的就是解耦:把复杂的逻辑表示封装在一个单独的静态工厂类,类似工具类一样的角色;

当主类需要实现复杂的业务逻辑时,

单独将逻辑封装进一个对应的静态工厂方法中(封装变化点)

主类只需要静态的调用工厂方法(简洁接口)

并传入正确的参数(控制逻辑)

此时工厂类会通过参数调用对应的静态方法并返回给主类

这样就完成了静态工厂方法的应用,此时需要修改业务逻辑只需要修改工厂类中的逻辑,达到了解耦的目的

同时还保持了主类中的逻辑简洁,代码干净.


代码示例:

public class OrderService {
public void payOrder(String orderId, String payType) {
// 复杂的创建逻辑分散在业务代码中
Payment payment;
if ("alipay".equals(payType)) {
payment = new AlipayPayment(key, secret, config); // 需要知道复杂的参数
} else if ("wechatpay".equals(payType)) {
payment = new WechatPayment(appId, mchId, key);
} else if ("bankcard".equals(payType)) {
payment = new BankCardPayment(apiUrl, merchantNo);
} else {
throw new RuntimeException("Unsupported pay type");
}

payment.pay(...); // 支付逻辑
// ... 更多订单逻辑 ...
}
}


如上,代码十分冗杂且不具备可维护性,所以这里就需要静态工厂方法来拯救(因为静态工厂方法最简洁,但是灵活性不如其他的工厂方法)

而通过静态工厂方法方式的代码:

public class PaymentFactory {
// 封装所有复杂的创建逻辑
public static Payment createPayment(String payType) {
// 依据传入的参数调用对应的写好的方法
if ("alipay".equals(payType)) {
return new AlipayPayment(getAlipayKey(), getAlipaySecret(), getAlipayConfig());
} else if ("wechatpay".equals(payType)) {
return new WechatPayment(getWechatAppId(), getWechatMchId(), getWechatKey());
} else if ("bankcard".equals(payType)) {
return new BankCardPayment(getBankApiUrl(), getMerchantNo());
} else {
throw new RuntimeException("Unsupported pay type");
}
}

//将原本主类中复杂的逻辑业务剥离出来并封装进静态工厂方法中
//此时主类中只需要:

public class OrderService {
public void payOrder(String orderId, String payType) {

// 只需要这一行!传入参数,拿到对象。干净利落!
Payment payment = PaymentFactory.createPayment(payType);
}
}

十分的优秀且便捷,我们称之为:高效

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇