您的位置:首页 > 财经 > 产业 > 工厂模式和策略模式的区别

工厂模式和策略模式的区别

2024/10/6 2:23:20 来源:https://blog.csdn.net/luChenH/article/details/141960154  浏览:    关键词:工厂模式和策略模式的区别

不讲那么枯燥的文字。直接看个简单的示例:

场景设定

        假设我们正在开发一个在线购物平台,该平台支持多种支付方式,比如微信支付、支付宝支付和银行卡支付。

1. 工厂模式


  工厂模式用于创建对象,特别是当需要创建多个相关的对象时。定义支付接口

public interface PaymentStrategy {void pay(double amount);
}

具体实现类

public class WeChatPay implements PaymentStrategy {@Overridepublic void pay(double amount) {System.out.println("使用微信支付支付了:" + amount + "元");}
}public class Alipay implements PaymentStrategy {@Overridepublic void pay(double amount) {System.out.println("使用支付宝支付了:" + amount + "元");}
}public class BankCardPay implements PaymentStrategy {@Overridepublic void pay(double amount) {System.out.println("使用银行卡支付了:" + amount + "元");}
}

工厂类

public class PaymentFactory {public static PaymentStrategy createPayment(String paymentMethod) {switch (paymentMethod) {case "wechat":return new WeChatPay();case "alipay":return new Alipay();case "bankcard":return new BankCardPay();default:throw new IllegalArgumentException("未知的支付方式: " + paymentMethod);}}
}

使用工厂模式

public class ShoppingCart {public void checkout(double amount, String paymentMethod) {PaymentStrategy strategy = PaymentFactory.createPayment(paymentMethod);strategy.pay(amount);}public static void main(String[] args) {ShoppingCart cart = new ShoppingCart();cart.checkout(100.0, "wechat");  // 使用微信支付cart.checkout(200.0, "alipay");  // 使用支付宝支付cart.checkout(300.0, "bankcard");  // 使用银行卡支付}
}

2. 策略模式


策略模式用于封装算法,并允许在运行时选择不同的算法。定义支付策略接口

public interface PaymentStrategy {void pay(double amount);
}

具体实现类

public class WeChatPay implements PaymentStrategy {@Overridepublic void pay(double amount) {System.out.println("使用微信支付支付了:" + amount + "元");}
}public class Alipay implements PaymentStrategy {@Overridepublic void pay(double amount) {System.out.println("使用支付宝支付了:" + amount + "元");}
}public class BankCardPay implements PaymentStrategy {@Overridepublic void pay(double amount) {System.out.println("使用银行卡支付了:" + amount + "元");}
}

使用策略模式

public class ShoppingCart {private PaymentStrategy paymentStrategy;public ShoppingCart(PaymentStrategy paymentStrategy) {this.paymentStrategy = paymentStrategy;}public void setPaymentStrategy(PaymentStrategy paymentStrategy) {this.paymentStrategy = paymentStrategy;}public void checkout(double amount) {paymentStrategy.pay(amount);}public static void main(String[] args) {ShoppingCart cart = new ShoppingCart(new WeChatPay());cart.checkout(100.0);  // 使用微信支付cart.setPaymentStrategy(new Alipay());cart.checkout(200.0);  // 使用支付宝支付cart.setPaymentStrategy(new BankCardPay());cart.checkout(300.0);  // 使用银行卡支付}
}

3. 区别总结


工厂模式:

  1. 用途:用于创建对象,特别是当需要创建多个相关的对象时。
  2. 关注点:对象的创建过程。
  3. 实现:通过工厂类(PaymentFactory)来创建不同的支付策略对象。
  4. 示例:通过 PaymentFactory 创建不同的支付策略对象,并在 ShoppingCart 中使用。

策略模式:

  1. 用途:封装算法,并允许在运行时选择不同的算法。
  2. 关注点:算法的选择和封装。
  3. 实现:通过策略接口(PaymentStrategy)和具体策略类(WeChatPay, Alipay, BankCardPay)来实现不同的支付逻辑。
  4. 示例:通过 ShoppingCart 类中的 setPaymentStrategy 方法来动态切换不同的支付策略。

 

4. 工厂模式和策略模式结合使用


实际应用中,工厂模式和策略模式可以结合使用。例:一个创建对象,一个做支付逻辑

4.1.使用工厂模式创建支付策略对象

   PaymentStrategy strategy = PaymentFactory.createPayment(paymentMethod);

4.2.使用策略模式来执行支付逻辑

   ShoppingCart cart = new ShoppingCart(strategy);cart.checkout(amount);

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com