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

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

总结

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

相关文章
|
16小时前
|
设计模式 消息中间件 Java
Java 设计模式:探索发布-订阅模式的原理与应用
【4月更文挑战第27天】发布-订阅模式是一种消息传递范式,被广泛用于构建松散耦合的系统。在 Java 中,这种模式允许多个对象监听和响应感兴趣的事件。
8 2
|
16小时前
|
设计模式 算法 Java
Java 设计模式:探索策略模式的概念和实战应用
【4月更文挑战第27天】策略模式是一种行为设计模式,它允许在运行时选择算法的行为。在 Java 中,策略模式通过定义一系列的算法,并将每一个算法封装起来,并使它们可以互换,这样算法的变化不会影响到使用算法的客户。
6 1
|
1天前
|
设计模式 安全 Java
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
【JAVA】Java 中什么叫单例设计模式?请用 Java 写出线程安全的单例模式
|
3天前
|
设计模式 算法 Java
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
[设计模式Java实现附plantuml源码~行为型]定义算法的框架——模板方法模式
|
3天前
|
设计模式 JavaScript Java
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
[设计模式Java实现附plantuml源码~行为型] 对象状态及其转换——状态模式
|
3天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
3天前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
|
4天前
|
设计模式 存储 前端开发
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
Java从入门到精通:2.2.1学习Java Web开发,了解Servlet和JSP技术,掌握MVC设计模式
|
10天前
|
设计模式 算法 Java
Java中的设计模式及其应用
【4月更文挑战第18天】本文介绍了Java设计模式的重要性及分类,包括创建型、结构型和行为型模式。创建型模式如单例、工厂方法用于对象创建;结构型模式如适配器、组合关注对象组合;行为型模式如策略、观察者关注对象交互。文中还举例说明了单例模式在配置管理器中的应用,工厂方法在图形编辑器中的使用,以及策略模式在电商折扣计算中的实践。设计模式能提升代码可读性、可维护性和可扩展性,是Java开发者的必备知识。
|
6月前
|
设计模式 安全 Java
JAVA设计模式1:单例模式,确保每个类只能有一个实例
JAVA设计模式1:单例模式,确保每个类只能有一个实例