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

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

总结

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

相关文章
|
13天前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
39 2
|
25天前
|
设计模式 Java 程序员
[Java]23种设计模式
本文介绍了设计模式的概念及其七大原则,强调了设计模式在提高代码重用性、可读性、可扩展性和可靠性方面的作用。文章还简要概述了23种设计模式,并提供了进一步学习的资源链接。
38 0
[Java]23种设计模式
|
9天前
|
设计模式 JavaScript Java
Java设计模式:建造者模式详解
建造者模式是一种创建型设计模式,通过将复杂对象的构建过程与表示分离,使得相同的构建过程可以创建不同的表示。本文详细介绍了建造者模式的原理、背景、应用场景及实际Demo,帮助读者更好地理解和应用这一模式。
|
1月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文通过游泳运动员的案例,介绍策略模式及其在Kotlin中的改良应用,利用高阶函数简化代码结构,提高灵活性。
30 3
|
1月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
本教程详细讲解Kotlin语法,适合深入学习。快速入门可参考“简洁”系列教程。本文介绍策略模式在Kotlin中的应用,通过游泳运动员的例子,展示如何使用接口和高阶函数实现策略模式,使代码更简洁、灵活。
28 2
|
1月前
|
设计模式 算法 Kotlin
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
Kotlin教程笔记(53) - 改良设计模式 - 策略模式
62 3
|
1月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
【10月更文挑战第9天】 策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在PHP开发中,通过使用策略模式,我们可以轻松切换算法或逻辑处理方式而无需修改现有代码结构。本文将深入探讨策略模式的定义、结构以及如何在PHP中实现该模式,并通过实际案例展示其应用价值和优势。
30 1
|
1月前
|
设计模式 算法 Kotlin
Kotlin - 改良设计模式 - 策略模式
Kotlin - 改良设计模式 - 策略模式
|
1月前
|
设计模式 算法 PHP
PHP中的设计模式:策略模式的深入解析与实践
【10月更文挑战第12天】 在软件开发的世界中,设计模式是解决常见问题的最佳实践。它们不是具体的代码,而是一种编码和设计经验的总结。在PHP开发中,合理运用设计模式可以极大地提高代码的可维护性、扩展性和复用性。本文将深入探讨策略模式(Strategy Pattern)的原理、实现方式及其在PHP中的应用。通过具体示例,我们将展示如何利用策略模式来解耦算法与对象,从而让代码更加灵活和易于管理。
19 0
|
1月前
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与实践
【10月更文挑战第9天】 在PHP开发领域,设计模式是提升代码可维护性、扩展性和重用性的关键技术之一。本文聚焦于策略模式这一行为型设计模式,通过理论阐述与实例分析,揭示其在PHP应用程序中优化算法切换和业务逻辑解耦方面的强大效用。不同于常规摘要,本文不直接概述研究方法或结果,而是基于实际开发场景,探讨策略模式的应用价值和实现方式,旨在为PHP开发者提供一种高效应对复杂业务需求变化和技术债务累积问题的策略思维。