Java设计模式-策略模式(Strategy)

简介: Java设计模式-策略模式(Strategy)

文章目录

前言

本篇介绍使用策略模式实现支付方式的改变,算法封装在各个算法里边,如需增加支付方式直接增加一个实现策略实现支付接口的类,调用传入新增的支付方式即可。

一、策略模式

分别封装行为接口,实现算法族超类里放对象在子具体 设定行为对象。原则就是:分离变化部,封装接口基于编程各种功能此模式让行 为的 变化独立于算法的使用者。

二、策略模式示例代码

定义支付策略

1.支付策略

支付策略实现一个接口,支付接口。

/**

* 支付策略

*/

public interface PayStrategy {

   /**

    * 支付

    * @param payMode 支付方式

    * @param money  支付金额

    */

  void pay(String payMode,BigDecimal money);

}

2.具体支付策略实现

支付宝支付:

/**

* 支付宝支付

*/

public class AliPay implements PayStrategy{

   @Override

   public void pay(String payMode, BigDecimal money) {

       System.out.println("支付方式:"+payMode+",支付金额:"+money);

   }

}

微信支付:

/**

* 微信支付

*/

public class WechatPay implements PayStrategy{

   @Override

   public void pay(String payMode, BigDecimal money) {

       System.out.println("支付方式:"+payMode+",支付金额:"+money);

   }

}

银行卡支付:

/**

* 银行支付

*/

public class BankPay implements PayStrategy{

   @Override

   public void pay(String payMode, BigDecimal money) {

       System.out.println("支付方式:"+payMode+",支付金额:"+money);

   }

}

3.策略执行对象

/**

* 支付

*/

public class Context {

   PayStrategy payStrategy;

   public Context(PayStrategy payStrategy) {

       this.payStrategy = payStrategy;

   }

   /**

    * 执行支付策略

    * @param payMode

    * @param amt

    */

   public void executeStrategy(String payMode, BigDecimal amt){

       payStrategy.pay(payMode, amt);

   }

}

4.测试

/**

* 测试

*/

public class Client {

   public static void main(String[] args) {

       System.out.println("=====支付宝支付========");

       Context applicationContext =  new Context( new AliPay());

       applicationContext.executeStrategy("支付宝",new BigDecimal("100.0"));

       System.out.println("=====支付宝支付========");

       System.out.println("=====微信支付========");

       applicationContext =  new Context(new WechatPay());

       applicationContext.executeStrategy("微信",new BigDecimal("200.0"));

       System.out.println("=====微信支付========");

       System.out.println("=====银行支付========");

       applicationContext =  new Context(new BankPay());

       applicationContext.executeStrategy("银行卡",new BigDecimal("300.0"));

       System.out.println("=====银行支付========");

     

   }

}

测试结果

=====支付宝支付========

支付方式:支付宝,支付金额:100.0

=====支付宝支付========

=====微信支付========

支付方式:微信,支付金额:200.0

=====微信支付========

=====银行支付========

支付方式:银行卡,支付金额:300.0

=====银行支付========

总结

策略设计模式体现了几个设计原则,第一、把变化的代码从不中分离出来;第二、面对接口编程;三多用组合/聚合, 少用继承。

相关文章
|
5月前
|
设计模式 算法 Kotlin
Kotlin - 改良设计模式 - 策略模式
Kotlin - 改良设计模式 - 策略模式
81 4
|
1月前
|
设计模式 Java 数据安全/隐私保护
Java 设计模式:装饰者模式(Decorator Pattern)
装饰者模式属于结构型设计模式,允许通过动态包装对象的方式为对象添加新功能,提供比继承更灵活的扩展方式。该模式通过组合替代继承,遵循开闭原则(对扩展开放,对修改关闭)。
|
2月前
|
设计模式 算法 开发者
「全网最细 + 实战源码案例」设计模式——策略模式
策略模式(Strategy Pattern)是一种行为型设计模式,用于定义一系列可替换的算法或行为,并将它们封装成独立的类。通过上下文持有策略对象,在运行时动态切换算法,提高代码的可维护性和扩展性。适用于需要动态切换算法、避免条件语句、经常扩展算法或保持算法独立性的场景。优点包括符合开闭原则、运行时切换算法、解耦上下文与策略实现、减少条件判断;缺点是增加类数量和策略切换成本。示例中通过定义抽象策略接口和具体策略类,结合上下文类实现动态算法选择。
92 8
「全网最细 + 实战源码案例」设计模式——策略模式
|
4月前
|
设计模式 存储 缓存
前端必须掌握的设计模式——策略模式
策略模式(Strategy Pattern)是一种行为型设计模式,旨在将多分支复杂逻辑解耦。每个分支类只关心自身实现,无需处理策略切换。它避免了大量if-else或switch-case代码,符合开闭原则。常见应用场景包括表单验证、风格切换和缓存调度等。通过定义接口和上下文类,策略模式实现了灵活的逻辑分离与扩展。例如,在国际化需求中,可根据语言切换不同的词条包,使代码更加简洁优雅。总结来说,策略模式简化了多条件判断,提升了代码的可维护性和扩展性。
|
5月前
|
设计模式 消息中间件 搜索推荐
Java 设计模式——观察者模式:从优衣库不使用新疆棉事件看系统的动态响应
【11月更文挑战第17天】观察者模式是一种行为设计模式,定义了一对多的依赖关系,使多个观察者对象能直接监听并响应某一主题对象的状态变化。本文介绍了观察者模式的基本概念、商业系统中的应用实例,如优衣库事件中各相关方的动态响应,以及模式的优势和实际系统设计中的应用建议,包括事件驱动架构和消息队列的使用。
105 6
|
5月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
70 1
|
5月前
|
设计模式 前端开发 JavaScript
JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式
本文深入探讨了JavaScript设计模式及其在实战中的应用,涵盖单例、工厂、观察者、装饰器和策略模式,结合电商网站案例,展示了设计模式如何提升代码的可维护性、扩展性和可读性,强调了其在前端开发中的重要性。
79 2
|
5月前
|
设计模式 Java 数据库连接
Java编程中的设计模式:单例模式的深度剖析
【10月更文挑战第41天】本文深入探讨了Java中广泛使用的单例设计模式,旨在通过简明扼要的语言和实际示例,帮助读者理解其核心原理和应用。文章将介绍单例模式的重要性、实现方式以及在实际应用中如何优雅地处理多线程问题。
79 4
|
5月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
71 2
|
5月前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
192 0